mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 9.1.0507: hard to detect cursor movement in the command line
Problem: hard to detect cursor movement in the command line Solution: Add the CursorMovedC autocommand (Shougo Matsushita) closes: #15040 Signed-off-by: Shougo Matsushita <Shougo.Matsu@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
beb02ed674
commit
d09521476f
@@ -1,4 +1,4 @@
|
|||||||
*autocmd.txt* For Vim version 9.1. Last change: 2024 May 05
|
*autocmd.txt* For Vim version 9.1. Last change: 2024 Jun 20
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -379,6 +379,7 @@ Name triggered by ~
|
|||||||
|CursorHold| the user doesn't press a key for a while
|
|CursorHold| the user doesn't press a key for a while
|
||||||
|CursorHoldI| the user doesn't press a key for a while in Insert mode
|
|CursorHoldI| the user doesn't press a key for a while in Insert mode
|
||||||
|CursorMoved| the cursor was moved in Normal mode
|
|CursorMoved| the cursor was moved in Normal mode
|
||||||
|
|CursorMovedC| the cursor was moved in the |Command-line|
|
||||||
|CursorMovedI| the cursor was moved in Insert mode
|
|CursorMovedI| the cursor was moved in Insert mode
|
||||||
|
|
||||||
|WinNewPre| before creating a new window
|
|WinNewPre| before creating a new window
|
||||||
@@ -748,6 +749,13 @@ CursorMoved After the cursor was moved in Normal or Visual
|
|||||||
Careful: This is triggered very often, don't
|
Careful: This is triggered very often, don't
|
||||||
do anything that the user does not expect or
|
do anything that the user does not expect or
|
||||||
that is slow.
|
that is slow.
|
||||||
|
*CursorMovedC*
|
||||||
|
CursorMovedC After the cursor was moved in the command
|
||||||
|
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|
|
||||||
*CursorMovedI*
|
*CursorMovedI*
|
||||||
CursorMovedI After the cursor was moved in Insert mode.
|
CursorMovedI After the cursor was moved in Insert mode.
|
||||||
Not triggered when the popup menu is visible.
|
Not triggered when the popup menu is visible.
|
||||||
|
@@ -4063,6 +4063,7 @@ CursorHold-example windows.txt /*CursorHold-example*
|
|||||||
CursorHoldI autocmd.txt /*CursorHoldI*
|
CursorHoldI autocmd.txt /*CursorHoldI*
|
||||||
CursorIM mbyte.txt /*CursorIM*
|
CursorIM mbyte.txt /*CursorIM*
|
||||||
CursorMoved autocmd.txt /*CursorMoved*
|
CursorMoved autocmd.txt /*CursorMoved*
|
||||||
|
CursorMovedC autocmd.txt /*CursorMovedC*
|
||||||
CursorMovedI autocmd.txt /*CursorMovedI*
|
CursorMovedI autocmd.txt /*CursorMovedI*
|
||||||
D change.txt /*D*
|
D change.txt /*D*
|
||||||
DOS os_dos.txt /*DOS*
|
DOS os_dos.txt /*DOS*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
*version9.txt* For Vim version 9.1. Last change: 2024 Jun 19
|
*version9.txt* For Vim version 9.1. Last change: 2024 Jun 20
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -41591,6 +41591,7 @@ Functions: ~
|
|||||||
|
|
||||||
Autocommands: ~
|
Autocommands: ~
|
||||||
|
|
||||||
|
|CursorMovedC| after the cursor was moved in the comamnd-line
|
||||||
|SessionWritePost| after writing the session file |:mksession|
|
|SessionWritePost| after writing the session file |:mksession|
|
||||||
|TermResponseAll| after the terminal response to |t_RV| and others is
|
|TermResponseAll| after the terminal response to |t_RV| and others is
|
||||||
received
|
received
|
||||||
|
@@ -120,6 +120,7 @@ static keyvalue_T event_tab[] = {
|
|||||||
KEYVALUE_ENTRY(EVENT_CURSORHOLD, "CursorHold"),
|
KEYVALUE_ENTRY(EVENT_CURSORHOLD, "CursorHold"),
|
||||||
KEYVALUE_ENTRY(EVENT_CURSORHOLDI, "CursorHoldI"),
|
KEYVALUE_ENTRY(EVENT_CURSORHOLDI, "CursorHoldI"),
|
||||||
KEYVALUE_ENTRY(EVENT_CURSORMOVED, "CursorMoved"),
|
KEYVALUE_ENTRY(EVENT_CURSORMOVED, "CursorMoved"),
|
||||||
|
KEYVALUE_ENTRY(EVENT_CURSORMOVEDC, "CursorMovedC"),
|
||||||
KEYVALUE_ENTRY(EVENT_CURSORMOVEDI, "CursorMovedI"),
|
KEYVALUE_ENTRY(EVENT_CURSORMOVEDI, "CursorMovedI"),
|
||||||
KEYVALUE_ENTRY(EVENT_DIFFUPDATED, "DiffUpdated"),
|
KEYVALUE_ENTRY(EVENT_DIFFUPDATED, "DiffUpdated"),
|
||||||
KEYVALUE_ENTRY(EVENT_DIRCHANGED, "DirChanged"),
|
KEYVALUE_ENTRY(EVENT_DIRCHANGED, "DirChanged"),
|
||||||
@@ -2250,6 +2251,7 @@ apply_autocmds_group(
|
|||||||
|| event == EVENT_CMDLINECHANGED
|
|| event == EVENT_CMDLINECHANGED
|
||||||
|| event == EVENT_CMDLINEENTER
|
|| event == EVENT_CMDLINEENTER
|
||||||
|| event == EVENT_CMDLINELEAVE
|
|| event == EVENT_CMDLINELEAVE
|
||||||
|
|| event == EVENT_CURSORMOVEDC
|
||||||
|| event == EVENT_CMDWINENTER
|
|| event == EVENT_CMDWINENTER
|
||||||
|| event == EVENT_CMDWINLEAVE
|
|| event == EVENT_CMDWINLEAVE
|
||||||
|| event == EVENT_CMDUNDEFINED
|
|| event == EVENT_CMDUNDEFINED
|
||||||
|
@@ -1586,6 +1586,7 @@ getcmdline_int(
|
|||||||
int res;
|
int res;
|
||||||
int save_msg_scroll = msg_scroll;
|
int save_msg_scroll = msg_scroll;
|
||||||
int save_State = State; // remember State when called
|
int save_State = State; // remember State when called
|
||||||
|
int save_cmdspos = ccline.cmdspos;
|
||||||
int some_key_typed = FALSE; // one of the keys was typed
|
int some_key_typed = FALSE; // one of the keys was typed
|
||||||
// mouse drag and release events are ignored, unless they are
|
// mouse drag and release events are ignored, unless they are
|
||||||
// preceded with a mouse down event
|
// preceded with a mouse down event
|
||||||
@@ -2473,6 +2474,10 @@ getcmdline_int(
|
|||||||
* (Sorry for the goto's, I know it is ugly).
|
* (Sorry for the goto's, I know it is ugly).
|
||||||
*/
|
*/
|
||||||
cmdline_not_changed:
|
cmdline_not_changed:
|
||||||
|
// Trigger CursorMovedC autocommands.
|
||||||
|
if (ccline.cmdspos != save_cmdspos)
|
||||||
|
trigger_cmd_autocmd(cmdline_type, EVENT_CURSORMOVEDC);
|
||||||
|
|
||||||
#ifdef FEAT_SEARCH_EXTRA
|
#ifdef FEAT_SEARCH_EXTRA
|
||||||
if (!is_state.incsearch_postponed)
|
if (!is_state.incsearch_postponed)
|
||||||
continue;
|
continue;
|
||||||
@@ -2484,8 +2489,8 @@ cmdline_changed:
|
|||||||
if (is_state.winid != curwin->w_id)
|
if (is_state.winid != curwin->w_id)
|
||||||
init_incsearch_state(&is_state);
|
init_incsearch_state(&is_state);
|
||||||
#endif
|
#endif
|
||||||
if (trigger_cmdlinechanged)
|
|
||||||
// Trigger CmdlineChanged autocommands.
|
// Trigger CmdlineChanged autocommands.
|
||||||
|
if (trigger_cmdlinechanged)
|
||||||
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
|
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
|
||||||
|
|
||||||
#ifdef FEAT_SEARCH_EXTRA
|
#ifdef FEAT_SEARCH_EXTRA
|
||||||
@@ -4315,6 +4320,10 @@ set_cmdline_pos(
|
|||||||
new_cmdpos = 0;
|
new_cmdpos = 0;
|
||||||
else
|
else
|
||||||
new_cmdpos = pos;
|
new_cmdpos = pos;
|
||||||
|
|
||||||
|
// Trigger CursorMovedC autocommands.
|
||||||
|
trigger_cmd_autocmd(get_cmdline_type(), EVENT_CURSORMOVEDC);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2096,6 +2096,21 @@ func Test_Cmdline()
|
|||||||
au! CmdlineEnter
|
au! CmdlineEnter
|
||||||
au! CmdlineLeave
|
au! CmdlineLeave
|
||||||
let &shellslash = save_shellslash
|
let &shellslash = save_shellslash
|
||||||
|
|
||||||
|
au! CursorMovedC : let g:pos = getcmdpos()
|
||||||
|
let g:pos = 0
|
||||||
|
call feedkeys(":hello\<Left>\<ESC>", 'xt')
|
||||||
|
call assert_equal(5, g:pos)
|
||||||
|
call feedkeys(":12345678\<C-R>=setcmdpos(3)\<CR>\<ESC>", 'xt')
|
||||||
|
call assert_equal(3, g:pos)
|
||||||
|
au! CursorMovedC
|
||||||
|
|
||||||
|
" CursorMovedC changes the cursor position.
|
||||||
|
au! CursorMovedC : let g:pos = getcmdpos() | call setcmdpos(getcmdpos()-1)
|
||||||
|
let g:pos = 0
|
||||||
|
call feedkeys(":hello\<Left>\<ESC>", 'xt')
|
||||||
|
call assert_equal(5, g:pos)
|
||||||
|
au! CursorMovedC
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test for BufWritePre autocommand that deletes or unloads the buffer.
|
" Test for BufWritePre autocommand that deletes or unloads the buffer.
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
507,
|
||||||
/**/
|
/**/
|
||||||
506,
|
506,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -1361,6 +1361,7 @@ enum auto_event
|
|||||||
EVENT_CURSORHOLD, // cursor in same position for a while
|
EVENT_CURSORHOLD, // cursor in same position for a while
|
||||||
EVENT_CURSORHOLDI, // idem, in Insert mode
|
EVENT_CURSORHOLDI, // idem, in Insert mode
|
||||||
EVENT_CURSORMOVED, // cursor was moved
|
EVENT_CURSORMOVED, // cursor was moved
|
||||||
|
EVENT_CURSORMOVEDC, // cursor was moved in Command line mode
|
||||||
EVENT_CURSORMOVEDI, // cursor was moved in Insert mode
|
EVENT_CURSORMOVEDI, // cursor was moved in Insert mode
|
||||||
EVENT_DIFFUPDATED, // after diffs were updated
|
EVENT_DIFFUPDATED, // after diffs were updated
|
||||||
EVENT_DIRCHANGED, // after user changed directory
|
EVENT_DIRCHANGED, // after user changed directory
|
||||||
|
Reference in New Issue
Block a user