Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [BUG]: zle-line-pre-redraw breaks vi-repeat-change



On Wed, Oct 7, 2020 at 2:49 PM Roman Perepelitsa
<roman.perepelitsa@xxxxxxxxx> wrote:
>
> If zle-line-pre-redraw is defined, vi-repeat-change behaves as if the
> numeric argument was always 1.
>
> To reproduce from `zsh -f`:
>
>   % function zle-line-pre-redraw() {}
>   % zle -N zle-line-pre-redraw
>   % bindkey -v
>   % 123456<ESC><2X><.>
>
> The last line in more detail:
>
>   - "123456" is self-insert
>   - ESC is vi-cmd-mode
>   - "2X" is vi-backward-delete-char with NUMERIC = 2
>   - "." is vi-repeat-change
>
> Expected: BUFFER contains "16".
>
> Actual: BUFFER contains "126".
>
> The actual behavior is unchanged if <.> is replaced with <3.>. The
> expected BUFFER in this case is "6".

GammaFunction@xxxxxxxxxxx (CC-ed) has sent
https://github.com/zsh-users/zsh/pull/69 that fixes the two tests I've
described above. Here's the patch from the PR.

Roman.
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
index 8c0534708..0561c3b3b 100644
--- a/Src/Zle/zle_main.c
+++ b/Src/Zle/zle_main.c
@@ -1065,6 +1065,7 @@ redrawhook(void)
 	int saverrflag = errflag, savretflag = retflag;
 	int lastcmd_prev = lastcmd;
 	int old_incompfunc = incompfunc;
+	int old_viinrepeat = viinrepeat;
 	char *args[2];
 	Thingy lbindk_save = lbindk, bindk_save = bindk;
 
@@ -1079,6 +1080,7 @@ redrawhook(void)
 	incompfunc = 0;
 	execzlefunc(initthingy, args, 1, 0);
 	incompfunc = old_incompfunc;
+	viinrepeat = old_viinrepeat;
 
 	/* Restore errflag and retflag as zlecallhook() does */
 	errflag = saverrflag | (errflag & ERRFLAG_INT);


Messages sorted by: Reverse Date, Date, Thread, Author