diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.c | 2 | ||||
-rw-r--r-- | src/nvim/ex_docmd.c | 2 | ||||
-rw-r--r-- | src/nvim/testdir/test_functions.vim | 30 |
3 files changed, 26 insertions, 8 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 6eb4263a0c..aa4a3da9e5 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -9673,7 +9673,6 @@ static void f_getchar(typval_T *argvars, typval_T *rettv, FunPtr fptr) { varnumber_T n; bool error = false; - const int save_reg_executing = reg_executing; no_mapping++; for (;; ) { @@ -9710,7 +9709,6 @@ static void f_getchar(typval_T *argvars, typval_T *rettv, FunPtr fptr) break; } no_mapping--; - reg_executing = save_reg_executing; vimvars[VV_MOUSE_WIN].vv_nr = 0; vimvars[VV_MOUSE_WINID].vv_nr = 0; diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 527120ae9f..f55062af53 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -1233,6 +1233,7 @@ static char_u * do_one_cmd(char_u **cmdlinep, int did_esilent = 0; int did_sandbox = FALSE; cmdmod_T save_cmdmod; + const int save_reg_executing = reg_executing; int ni; /* set when Not Implemented */ char_u *cmd; int address_count = 1; @@ -2298,6 +2299,7 @@ doend: } cmdmod = save_cmdmod; + reg_executing = save_reg_executing; if (save_msg_silent != -1) { /* messages could be enabled for a serious error, need to check if the diff --git a/src/nvim/testdir/test_functions.vim b/src/nvim/testdir/test_functions.vim index d58e4f8758..ed9c70403e 100644 --- a/src/nvim/testdir/test_functions.vim +++ b/src/nvim/testdir/test_functions.vim @@ -1103,20 +1103,38 @@ func Test_reg_executing_and_recording() " getchar() command saves and restores reg_executing map W :call TestFunc()<CR> let @q = "W" + let g:typed = '' + let g:regs = [] func TestFunc() abort - let g:reg1 = reg_executing() + let g:regs += [reg_executing()] let g:typed = getchar(0) - let g:reg2 = reg_executing() + let g:regs += [reg_executing()] endfunc call feedkeys("@qy", 'xt') call assert_equal(char2nr("y"), g:typed) - call assert_equal('q', g:reg1) - call assert_equal('q', g:reg2) + call assert_equal(['q', 'q'], g:regs) delfunc TestFunc unmap W unlet g:typed - unlet g:reg1 - unlet g:reg2 + unlet g:regs + + " input() command saves and restores reg_executing + map W :call TestFunc()<CR> + let @q = "W" + let g:typed = '' + let g:regs = [] + func TestFunc() abort + let g:regs += [reg_executing()] + let g:typed = input('?') + let g:regs += [reg_executing()] + endfunc + call feedkeys("@qy\<CR>", 'xt') + call assert_equal("y", g:typed) + call assert_equal(['q', 'q'], g:regs) + delfunc TestFunc + unmap W + unlet g:typed + unlet g:regs bwipe! delfunc s:save_reg_stat |