about summary refs log tree commit diff
path: root/Src/Zle/zle_move.c
diff options
context:
space:
mode:
authorOliver Kiddle <opk@users.sourceforge.net>2013-02-09 21:27:47 +0000
committerOliver Kiddle <opk@users.sourceforge.net>2013-02-09 21:27:47 +0000
commitd88a46b1a9d58698c6f53ac02056ec8cc5113ead (patch)
tree732a06d880cf1c4a3f226af875b3ec64de8108bf /Src/Zle/zle_move.c
parent08df75a8b1b294e12b5090e8d1c8fd09882d468b (diff)
downloadzsh-d88a46b1a9d58698c6f53ac02056ec8cc5113ead.tar.gz
zsh-d88a46b1a9d58698c6f53ac02056ec8cc5113ead.tar.xz
zsh-d88a46b1a9d58698c6f53ac02056ec8cc5113ead.zip
31037: return to previous position with vi-goto-mark using `` or ''
Diffstat (limited to 'Src/Zle/zle_move.c')
-rw-r--r--Src/Zle/zle_move.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/Src/Zle/zle_move.c b/Src/Zle/zle_move.c
index d5f464c2c..379c8982a 100644
--- a/Src/Zle/zle_move.c
+++ b/Src/Zle/zle_move.c
@@ -30,7 +30,7 @@
 #include "zle.mdh"
 #include "zle_move.pro"
 
-static int vimarkcs[26], vimarkline[26];
+static int vimarkcs[27], vimarkline[27];
 
 #ifdef MULTIBYTE_SUPPORT
 /*
@@ -825,11 +825,17 @@ int
 vigotomark(UNUSED(char **args))
 {
     ZLE_INT_T ch;
+    int oldcs = zlecs;
+    int oldline = histline;
 
     ch = getfullchar(0);
-    if (ch < ZWC('a') || ch > ZWC('z'))
-	return 1;
-    ch -= ZWC('a');
+    if (ch == ZWC('\'') || ch == ZWC('`'))
+	ch = 26;
+    else {
+	if (ch < ZWC('a') || ch > ZWC('z'))
+	    return 1;
+	ch -= ZWC('a');
+    }
     if (!vimarkline[ch])
 	return 1;
     if (curhist != vimarkline[ch] && !zle_goto_hist(vimarkline[ch], 0, 0)) {
@@ -837,6 +843,8 @@ vigotomark(UNUSED(char **args))
 	return 1;
     }
     zlecs = vimarkcs[ch];
+    vimarkcs[26] = oldcs;
+    vimarkline[26] = histline;
     if (zlecs > zlell)
 	zlecs = zlell;
     return 0;