0
0
mirror of https://github.com/vim/vim.git synced 2025-09-18 02:53:56 -04:00

patch 9.1.0543: Behavior of CursorMovedC is strange

Problem:  Behavior of CursorMovedC is strange.
Solution: Also trigger when the cmdline has changed.
          (zeertzjq)

fixes: #15069
closes: #15071

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
zeertzjq 2024-07-07 20:48:25 +02:00 committed by Christian Brabandt
parent e85fdc730e
commit 8145620a95
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
4 changed files with 26 additions and 9 deletions

View File

@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 9.1. Last change: 2024 Jul 06
*autocmd.txt* For Vim version 9.1. Last change: 2024 Jul 07
VIM REFERENCE MANUAL by Bram Moolenaar
@ -751,9 +751,8 @@ CursorMoved After the cursor was moved in Normal or Visual
that is slow.
*CursorMovedC*
CursorMovedC After the cursor was moved in the command
line while the text in the command line hasn't
changed. Be careful not to mess up the
command line, it may cause Vim to lock up.
line. Be careful not to mess up the command
line, it may cause Vim to lock up.
<afile> is set to a single character,
indicating the type of command-line.
|cmdwin-char|

View File

@ -2480,13 +2480,13 @@ cmdline_not_changed:
trigger_cmd_autocmd(cmdline_type, EVENT_CURSORMOVEDC);
prev_cmdpos = ccline.cmdpos;
}
#ifdef FEAT_SEARCH_EXTRA
if (!is_state.incsearch_postponed)
continue;
#endif
cmdline_changed:
prev_cmdpos = ccline.cmdpos;
#ifdef FEAT_SEARCH_EXTRA
// If the window changed incremental search state is not valid.
if (is_state.winid != curwin->w_id)
@ -2496,6 +2496,13 @@ cmdline_changed:
if (trigger_cmdlinechanged)
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
// Trigger CursorMovedC autocommands.
if (ccline.cmdpos != prev_cmdpos)
{
trigger_cmd_autocmd(cmdline_type, EVENT_CURSORMOVEDC);
prev_cmdpos = ccline.cmdpos;
}
#ifdef FEAT_SEARCH_EXTRA
if (xpc.xp_context == EXPAND_NOTHING && (KeyTyped || vpeekc() == NUL))
may_do_incsearch_highlighting(firstc, count, &is_state);

View File

@ -2099,21 +2099,30 @@ func Test_Cmdline()
au! CursorMovedC : let g:pos += [getcmdpos()]
let g:pos = []
call feedkeys(":foo bar baz\<C-W>\<C-W>\<C-W>\<Esc>", 'xt')
call assert_equal([2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 9, 5, 1], g:pos)
let g:pos = []
call feedkeys(":hello\<C-B>\<Esc>", 'xt')
call assert_equal([2, 3, 4, 5, 6, 1], g:pos)
let g:pos = []
call feedkeys(":hello\<C-U>\<Esc>", 'xt')
call assert_equal([2, 3, 4, 5, 6, 1], g:pos)
let g:pos = []
call feedkeys(":hello\<Left>\<C-R>=''\<CR>\<Left>\<Right>\<Esc>", 'xt')
call assert_equal([5, 4, 5], g:pos)
call assert_equal([2, 3, 4, 5, 6, 5, 4, 5], g:pos)
let g:pos = []
call feedkeys(":12345678\<C-R>=setcmdpos(3)??''\<CR>\<Esc>", 'xt')
call assert_equal([3], g:pos)
call assert_equal([2, 3, 4, 5, 6, 7, 8, 9, 3], g:pos)
let g:pos = []
call feedkeys(":12345678\<C-R>=setcmdpos(3)??''\<CR>\<Left>\<Esc>", 'xt')
call assert_equal([3, 2], g:pos)
call assert_equal([2, 3, 4, 5, 6, 7, 8, 9, 3, 2], g:pos)
au! CursorMovedC
" setcmdpos() is no-op inside an autocommand
au! CursorMovedC : let g:pos += [getcmdpos()] | call setcmdpos(1)
let g:pos = []
call feedkeys(":hello\<Left>\<Left>\<Esc>", 'xt')
call assert_equal([5, 4], g:pos)
call assert_equal([2, 3, 4, 5, 6, 5, 4], g:pos)
au! CursorMovedC
unlet g:entered

View File

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
543,
/**/
542,
/**/