diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-12-11 08:48:00 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-11 08:48:00 +0800 |
commit | 3dadd3aca5af4d09d0acbb027098b1a2c889e433 (patch) | |
tree | cd665467df862e420ed7697da6174f60466456e3 | |
parent | 224473546c95f17c45afc54fe8b4ef5f0e000974 (diff) | |
download | rneovim-3dadd3aca5af4d09d0acbb027098b1a2c889e433.tar.gz rneovim-3dadd3aca5af4d09d0acbb027098b1a2c889e433.tar.bz2 rneovim-3dadd3aca5af4d09d0acbb027098b1a2c889e433.zip |
vim-patch:8.2.2870: CmdlineChange event triggered twice for CTRL-R (#21361)
Problem: CmdlineChange event triggered twice for CTRL-R.
Solution: Return CMDLINE_NOT_CHANGED from cmdline_insert_reg().
(closes vim/vim#8219)
https://github.com/vim/vim/commit/796139ae3ac89e27ee96dce3c7fdb87d8c839f53
Cherry-pick Test_cmdline_map_cmdlineChanged() from patch 8.2.2851.
Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r-- | src/nvim/ex_getln.c | 3 | ||||
-rw-r--r-- | src/nvim/testdir/test_cmdline.vim | 24 | ||||
-rw-r--r-- | test/functional/autocmd/cmdline_spec.lua | 1 |
3 files changed, 26 insertions, 2 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 8fd7cb08f0..395cb5d98a 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -1609,7 +1609,8 @@ static int command_line_insert_reg(CommandLineState *s) ccline.special_char = NUL; redrawcmd(); - return CMDLINE_CHANGED; + // The text has been stuffed, the command line didn't change yet. + return CMDLINE_NOT_CHANGED; } /// Handle the Left and Right mouse clicks in the command-line mode. diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim index 0ab82e6bcd..b9f32b2db9 100644 --- a/src/nvim/testdir/test_cmdline.vim +++ b/src/nvim/testdir/test_cmdline.vim @@ -2235,6 +2235,30 @@ func Test_recalling_cmdline() cunmap <Plug>(save-cmdline) endfunc +func Test_cmd_map_cmdlineChanged() + let g:log = [] + cnoremap <F1> l<Cmd><CR>s + augroup test + autocmd! + autocmd CmdlineChanged : let g:log += [getcmdline()] + augroup END + + call feedkeys(":\<F1>\<CR>", 'xt') + call assert_equal(['l', 'ls'], g:log) + + let @b = 'b' + cnoremap <F1> a<C-R>b + let g:log = [] + call feedkeys(":\<F1>\<CR>", 'xt') + call assert_equal(['a', 'ab'], g:log) + + unlet g:log + cunmap <F1> + augroup test + autocmd! + augroup END +endfunc + " Test for the 'suffixes' option func Test_suffixes_opt() call writefile([], 'Xfile') diff --git a/test/functional/autocmd/cmdline_spec.lua b/test/functional/autocmd/cmdline_spec.lua index c96501ead4..60c29170e2 100644 --- a/test/functional/autocmd/cmdline_spec.lua +++ b/test/functional/autocmd/cmdline_spec.lua @@ -223,7 +223,6 @@ describe('cmdline autocommands', function() eq({'notification', 'CmdlineChanged', {{cmdtype='=', cmdlevel=2}, "1+1"}}, next_msg()) feed('<cr>') eq({'notification', 'CmdlineLeave', {{cmdtype='=', cmdlevel=2, abort=false}}}, next_msg()) - eq({'notification', 'CmdlineChanged', {{cmdtype=':', cmdlevel=1}, "let x = "}}, next_msg()) eq({'notification', 'CmdlineChanged', {{cmdtype=':', cmdlevel=1}, "let x = 2"}}, next_msg()) feed('<cr>') eq({'notification', 'CmdlineLeave', {{cmdtype=':', cmdlevel=1, abort=false}}}, next_msg()) |