mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.0.1206: no autocmd for entering or leaving the command line
Problem: No autocmd for entering or leaving the command line. Solution: Add CmdlineEnter and CmdlineLeave.
This commit is contained in:
@@ -492,6 +492,18 @@ CmdUndefined When a user command is used but it isn't
|
|||||||
command is defined. An alternative is to
|
command is defined. An alternative is to
|
||||||
always define the user command and have it
|
always define the user command and have it
|
||||||
invoke an autoloaded function. See |autoload|.
|
invoke an autoloaded function. See |autoload|.
|
||||||
|
*CmdlineEnter*
|
||||||
|
CmdlineEnter After moving the cursor to the command line,
|
||||||
|
where the user can type a command or search
|
||||||
|
string.
|
||||||
|
<afile> is set to a single character,
|
||||||
|
indicating the type of command-line.
|
||||||
|
|cmdwin-char|
|
||||||
|
*CmdlineLeave*
|
||||||
|
CmdlineLeave Before leaving the command line.
|
||||||
|
<afile> is set to a single character,
|
||||||
|
indicating the type of command-line.
|
||||||
|
|cmdwin-char|
|
||||||
*CmdwinEnter*
|
*CmdwinEnter*
|
||||||
CmdwinEnter After entering the command-line window.
|
CmdwinEnter After entering the command-line window.
|
||||||
Useful for setting options specifically for
|
Useful for setting options specifically for
|
||||||
|
@@ -145,6 +145,19 @@ sort_func_compare(const void *s1, const void *s2);
|
|||||||
static void set_search_match(pos_T *t);
|
static void set_search_match(pos_T *t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FEAT_AUTOCMD
|
||||||
|
static void
|
||||||
|
trigger_cmd_autocmd(int typechar, int evt)
|
||||||
|
{
|
||||||
|
char_u typestr[2];
|
||||||
|
|
||||||
|
typestr[0] = typechar;
|
||||||
|
typestr[1] = NUL;
|
||||||
|
apply_autocmds(evt, typestr, typestr, FALSE, curbuf);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* getcmdline() - accept a command line starting with firstc.
|
* getcmdline() - accept a command line starting with firstc.
|
||||||
*
|
*
|
||||||
@@ -222,6 +235,9 @@ getcmdline(
|
|||||||
* custom status line may invoke ":normal". */
|
* custom status line may invoke ":normal". */
|
||||||
struct cmdline_info save_ccline;
|
struct cmdline_info save_ccline;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef FEAT_AUTOCMD
|
||||||
|
int cmdline_type;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
if (firstc == -1)
|
if (firstc == -1)
|
||||||
@@ -349,6 +365,12 @@ getcmdline(
|
|||||||
* terminal mode set to cooked. Need to set raw mode here then. */
|
* terminal mode set to cooked. Need to set raw mode here then. */
|
||||||
settmode(TMODE_RAW);
|
settmode(TMODE_RAW);
|
||||||
|
|
||||||
|
#ifdef FEAT_AUTOCMD
|
||||||
|
/* Trigger CmdlineEnter autocommands. */
|
||||||
|
cmdline_type = firstc == NUL ? '-' : firstc;
|
||||||
|
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINEENTER);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_CMDHIST
|
#ifdef FEAT_CMDHIST
|
||||||
init_history();
|
init_history();
|
||||||
hiscnt = hislen; /* set hiscnt to impossible history value */
|
hiscnt = hislen; /* set hiscnt to impossible history value */
|
||||||
@@ -2085,6 +2107,11 @@ returncmd:
|
|||||||
if (some_key_typed)
|
if (some_key_typed)
|
||||||
need_wait_return = FALSE;
|
need_wait_return = FALSE;
|
||||||
|
|
||||||
|
#ifdef FEAT_AUTOCMD
|
||||||
|
/* Trigger CmdlineLeave autocommands. */
|
||||||
|
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVE);
|
||||||
|
#endif
|
||||||
|
|
||||||
State = save_State;
|
State = save_State;
|
||||||
#ifdef USE_IM_CONTROL
|
#ifdef USE_IM_CONTROL
|
||||||
if (b_im_ptr != NULL && *b_im_ptr != B_IMODE_LMAP)
|
if (b_im_ptr != NULL && *b_im_ptr != B_IMODE_LMAP)
|
||||||
@@ -6834,9 +6861,6 @@ open_cmdwin(void)
|
|||||||
linenr_T lnum;
|
linenr_T lnum;
|
||||||
int histtype;
|
int histtype;
|
||||||
garray_T winsizes;
|
garray_T winsizes;
|
||||||
#ifdef FEAT_AUTOCMD
|
|
||||||
char_u typestr[2];
|
|
||||||
#endif
|
|
||||||
int save_restart_edit = restart_edit;
|
int save_restart_edit = restart_edit;
|
||||||
int save_State = State;
|
int save_State = State;
|
||||||
int save_exmode = exmode_active;
|
int save_exmode = exmode_active;
|
||||||
@@ -6965,9 +6989,7 @@ open_cmdwin(void)
|
|||||||
|
|
||||||
# ifdef FEAT_AUTOCMD
|
# ifdef FEAT_AUTOCMD
|
||||||
/* Trigger CmdwinEnter autocommands. */
|
/* Trigger CmdwinEnter autocommands. */
|
||||||
typestr[0] = cmdwin_type;
|
trigger_cmd_autocmd(cmdwin_type, EVENT_CMDWINENTER);
|
||||||
typestr[1] = NUL;
|
|
||||||
apply_autocmds(EVENT_CMDWINENTER, typestr, typestr, FALSE, curbuf);
|
|
||||||
if (restart_edit != 0) /* autocmd with ":startinsert" */
|
if (restart_edit != 0) /* autocmd with ":startinsert" */
|
||||||
stuffcharReadbuff(K_NOP);
|
stuffcharReadbuff(K_NOP);
|
||||||
# endif
|
# endif
|
||||||
@@ -6990,7 +7012,7 @@ open_cmdwin(void)
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* Trigger CmdwinLeave autocommands. */
|
/* Trigger CmdwinLeave autocommands. */
|
||||||
apply_autocmds(EVENT_CMDWINLEAVE, typestr, typestr, FALSE, curbuf);
|
trigger_cmd_autocmd(cmdwin_type, EVENT_CMDWINLEAVE);
|
||||||
|
|
||||||
# ifdef FEAT_FOLDING
|
# ifdef FEAT_FOLDING
|
||||||
/* Restore KeyTyped in case it is modified by autocommands */
|
/* Restore KeyTyped in case it is modified by autocommands */
|
||||||
|
@@ -7731,6 +7731,8 @@ static struct event_name
|
|||||||
{"BufWritePost", EVENT_BUFWRITEPOST},
|
{"BufWritePost", EVENT_BUFWRITEPOST},
|
||||||
{"BufWritePre", EVENT_BUFWRITEPRE},
|
{"BufWritePre", EVENT_BUFWRITEPRE},
|
||||||
{"BufWriteCmd", EVENT_BUFWRITECMD},
|
{"BufWriteCmd", EVENT_BUFWRITECMD},
|
||||||
|
{"CmdlineEnter", EVENT_CMDLINEENTER},
|
||||||
|
{"CmdlineLeave", EVENT_CMDLINELEAVE},
|
||||||
{"CmdwinEnter", EVENT_CMDWINENTER},
|
{"CmdwinEnter", EVENT_CMDWINENTER},
|
||||||
{"CmdwinLeave", EVENT_CMDWINLEAVE},
|
{"CmdwinLeave", EVENT_CMDWINLEAVE},
|
||||||
{"CmdUndefined", EVENT_CMDUNDEFINED},
|
{"CmdUndefined", EVENT_CMDUNDEFINED},
|
||||||
|
@@ -793,3 +793,25 @@ func Test_QuitPre()
|
|||||||
bwipe Xfoo
|
bwipe Xfoo
|
||||||
bwipe Xbar
|
bwipe Xbar
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_Cmdline()
|
||||||
|
au! CmdlineEnter : let g:entered = expand('<afile>')
|
||||||
|
au! CmdlineLeave : let g:left = expand('<afile>')
|
||||||
|
let g:entered = 0
|
||||||
|
let g:left = 0
|
||||||
|
call feedkeys(":echo 'hello'\<CR>", 'xt')
|
||||||
|
call assert_equal(':', g:entered)
|
||||||
|
call assert_equal(':', g:left)
|
||||||
|
au! CmdlineEnter
|
||||||
|
au! CmdlineLeave
|
||||||
|
|
||||||
|
au! CmdlineEnter / let g:entered = expand('<afile>')
|
||||||
|
au! CmdlineLeave / let g:left = expand('<afile>')
|
||||||
|
let g:entered = 0
|
||||||
|
let g:left = 0
|
||||||
|
call feedkeys("/hello<CR>", 'xt')
|
||||||
|
call assert_equal('/', g:entered)
|
||||||
|
call assert_equal('/', g:left)
|
||||||
|
au! CmdlineEnter
|
||||||
|
au! CmdlineLeave
|
||||||
|
endfunc
|
||||||
|
@@ -761,6 +761,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 */
|
||||||
|
/**/
|
||||||
|
1206,
|
||||||
/**/
|
/**/
|
||||||
1205,
|
1205,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -1295,6 +1295,8 @@ enum auto_event
|
|||||||
EVENT_BUFWRITEPOST, /* after writing a buffer */
|
EVENT_BUFWRITEPOST, /* after writing a buffer */
|
||||||
EVENT_BUFWRITEPRE, /* before writing a buffer */
|
EVENT_BUFWRITEPRE, /* before writing a buffer */
|
||||||
EVENT_BUFWRITECMD, /* write buffer using command */
|
EVENT_BUFWRITECMD, /* write buffer using command */
|
||||||
|
EVENT_CMDLINEENTER, /* after entering the command line */
|
||||||
|
EVENT_CMDLINELEAVE, /* before leaving the command line */
|
||||||
EVENT_CMDWINENTER, /* after entering the cmdline window */
|
EVENT_CMDWINENTER, /* after entering the cmdline window */
|
||||||
EVENT_CMDWINLEAVE, /* before leaving the cmdline window */
|
EVENT_CMDWINLEAVE, /* before leaving the cmdline window */
|
||||||
EVENT_COLORSCHEME, /* after loading a colorscheme */
|
EVENT_COLORSCHEME, /* after loading a colorscheme */
|
||||||
|
Reference in New Issue
Block a user