]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.2178: reg_executing() wrong for :normal with range v9.0.2178
authorzeertzjq <zeertzjq@outlook.com>
Tue, 19 Dec 2023 19:35:40 +0000 (20:35 +0100)
committerChristian Brabandt <cb@256bit.org>
Tue, 19 Dec 2023 19:35:40 +0000 (20:35 +0100)
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>
src/globals.h
src/register.c
src/testdir/test_registers.vim
src/version.c

index c03fe97db918cb224088411ec70b4aad662ea041..b74ef35414d82553d12adeefe9ba9e6e9c18c30e 100644 (file)
@@ -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.
index 9a23be859280a1ca68e89c1a33b862d81134841b..1d0e46bd0bb68c2537bb3f4c35f34e9aa71758d1 100644 (file)
@@ -703,6 +703,7 @@ do_execreg(
                return FAIL;
        }
        reg_executing = regname == 0 ? '"' : regname; // disable "q" command
+       pending_end_reg_executing = FALSE;
     }
     return retval;
 }
index e8bee99d7429cbc0f6e27e43925403c7dcd7cb9e..f85e72735a22de7ddc997ae3e63592d382ccf85c 100644 (file)
@@ -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()
index b8dfc98a2ce0f46e0c4fe627251ec70fb503b398..498c346a991676fc0a45e59af6139592a35ae5c7 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2178,
 /**/
     2177,
 /**/