From d88a46b1a9d58698c6f53ac02056ec8cc5113ead Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Sat, 9 Feb 2013 21:27:47 +0000 Subject: 31037: return to previous position with vi-goto-mark using `` or '' --- Src/Zle/zle_move.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'Src') 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; -- cgit 1.4.1