summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-12-19 20:35:40 +0100
committerChristian Brabandt <cb@256bit.org>2023-12-19 20:35:40 +0100
commit615202bd0ebc1d8e3532f24b9b7232c2fd86b181 (patch)
treeabe4a6164bf61e7df0e7e65d33f48f9e0306c509
parentec14924368e23f2430815c009bd554f88de9c57f (diff)
patch 9.0.2178: reg_executing() wrong for :normal with rangev9.0.2178
Problem: reg_executing() returns wrong result in :normal with range when 'showcmd' is set (after 8.2.4705). Solution: Reset "pending_end_reg_executing" when executing a register. closes: #13707 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r--src/globals.h2
-rw-r--r--src/register.c1
-rw-r--r--src/testdir/test_registers.vim17
-rw-r--r--src/version.c2
4 files changed, 21 insertions, 1 deletions
diff --git a/src/globals.h b/src/globals.h
index c03fe97db9..b74ef35414 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1377,7 +1377,7 @@ EXTERN int ex_no_reprint INIT(= FALSE); // no need to print after z or p
EXTERN int reg_recording INIT(= 0); // register for recording or zero
EXTERN int reg_executing INIT(= 0); // register being executed or zero
// Flag set when peeking a character and found the end of executed register
-EXTERN int pending_end_reg_executing INIT(= 0);
+EXTERN int pending_end_reg_executing INIT(= FALSE);
// Set when a modifyOtherKeys sequence was seen, then simplified mappings will
// no longer be used. To be combined with modify_otherkeys_state.
diff --git a/src/register.c b/src/register.c
index 9a23be8592..1d0e46bd0b 100644
--- a/src/register.c
+++ b/src/register.c
@@ -703,6 +703,7 @@ do_execreg(
return FAIL;
}
reg_executing = regname == 0 ? '"' : regname; // disable "q" command
+ pending_end_reg_executing = FALSE;
}
return retval;
}
diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim
index e8bee99d74..f85e72735a 100644
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -840,6 +840,23 @@ func Test_end_reg_executing()
bwipe!
endfunc
+func Test_reg_executing_in_range_normal()
+ new
+ set showcmd
+ call setline(1, range(10))
+ let g:log = []
+ nnoremap s <Cmd>let g:log += [reg_executing()]<CR>
+ let @r = 's'
+
+ %normal @r
+ call assert_equal(repeat(['r'], 10), g:log)
+
+ nunmap s
+ unlet g:log
+ set showcmd&
+ bwipe!
+endfunc
+
" An operator-pending mode mapping shouldn't be applied to keys typed in
" Insert mode immediately after a character search when replaying.
func Test_replay_charsearch_omap()
diff --git a/src/version.c b/src/version.c
index b8dfc98a2c..498c346a99 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2178,
+/**/
2177,
/**/
2176,