patch 9.1.1679: unclear what key causes CmdlineLeave autocommand
Problem: unclear what key causes CmdlineLeave autocommand Solution: Set |v:char| to the key (Girish Palya). related: #17806 closes: #18063 Signed-off-by: Girish Palya <girishji@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
53466887f7
commit
ba9551d131
@ -1,4 +1,4 @@
|
|||||||
*autocmd.txt* For Vim version 9.1. Last change: 2025 Jun 19
|
*autocmd.txt* For Vim version 9.1. Last change: 2025 Aug 23
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -644,6 +644,8 @@ CmdlineLeave Before leaving the command line; including
|
|||||||
<afile> is set to a single character,
|
<afile> is set to a single character,
|
||||||
indicating the type of command-line.
|
indicating the type of command-line.
|
||||||
|cmdwin-char|
|
|cmdwin-char|
|
||||||
|
Sets the |v:char| to the key that exited the
|
||||||
|
command-line (e.g. <CR>, <CTRL-C>, <Esc>).
|
||||||
*CmdlineLeavePre*
|
*CmdlineLeavePre*
|
||||||
CmdlineLeavePre Just before leaving the command line, and
|
CmdlineLeavePre Just before leaving the command line, and
|
||||||
before |CmdlineLeave|. Useful for capturing
|
before |CmdlineLeave|. Useful for capturing
|
||||||
@ -656,6 +658,7 @@ CmdlineLeavePre Just before leaving the command line, and
|
|||||||
or <Esc>. <afile> is set to a single
|
or <Esc>. <afile> is set to a single
|
||||||
character indicating the command-line type.
|
character indicating the command-line type.
|
||||||
See |cmdwin-char| for details.
|
See |cmdwin-char| for details.
|
||||||
|
Sets |v:char| as with |CmdlineLeave|.
|
||||||
*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
|
||||||
|
|||||||
@ -2227,8 +2227,8 @@ v:beval_winid The |window-ID| of the window, over which the mouse pointer
|
|||||||
*v:char* *char-variable*
|
*v:char* *char-variable*
|
||||||
v:char Argument for evaluating 'formatexpr' and used for the typed
|
v:char Argument for evaluating 'formatexpr' and used for the typed
|
||||||
character when using <expr> in an abbreviation |:map-<expr>|.
|
character when using <expr> in an abbreviation |:map-<expr>|.
|
||||||
It is also used by the |InsertCharPre|, |InsertEnter| and
|
It is also used by the |InsertCharPre|, |InsertEnter|,
|
||||||
|KeyInputPre| events.
|
|KeyInputPre|, |CmdlineLeave| and |CmdlineLeavePre| events.
|
||||||
|
|
||||||
*v:charconvert_from* *charconvert_from-variable*
|
*v:charconvert_from* *charconvert_from-variable*
|
||||||
v:charconvert_from
|
v:charconvert_from
|
||||||
|
|||||||
@ -41750,6 +41750,8 @@ Others: ~
|
|||||||
ANGLE BRACKET "]>".
|
ANGLE BRACKET "]>".
|
||||||
- Support for Unix domain sockets have been added for the clientserver
|
- Support for Unix domain sockets have been added for the clientserver
|
||||||
feature, see |socketserver-clientserver|.
|
feature, see |socketserver-clientserver|.
|
||||||
|
- |CmdlineLeave| sets |v:char| to the character that caused exiting the
|
||||||
|
Command-line.
|
||||||
|
|
||||||
Platform specific ~
|
Platform specific ~
|
||||||
- MS-Winodws: Paths like "\Windows" and "/Windows" are now considered to be
|
- MS-Winodws: Paths like "\Windows" and "/Windows" are now considered to be
|
||||||
|
|||||||
@ -1980,6 +1980,9 @@ getcmdline_int(
|
|||||||
#endif
|
#endif
|
||||||
|| c == Ctrl_C))
|
|| c == Ctrl_C))
|
||||||
{
|
{
|
||||||
|
#ifdef FEAT_EVAL
|
||||||
|
set_vim_var_char(c); // Set v:char
|
||||||
|
#endif
|
||||||
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVEPRE);
|
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVEPRE);
|
||||||
event_cmdlineleavepre_triggered = TRUE;
|
event_cmdlineleavepre_triggered = TRUE;
|
||||||
#if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
|
#if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
|
||||||
@ -2646,7 +2649,12 @@ cmdline_changed:
|
|||||||
returncmd:
|
returncmd:
|
||||||
// Trigger CmdlineLeavePre autocommands if not already triggered.
|
// Trigger CmdlineLeavePre autocommands if not already triggered.
|
||||||
if (!event_cmdlineleavepre_triggered)
|
if (!event_cmdlineleavepre_triggered)
|
||||||
|
{
|
||||||
|
#ifdef FEAT_EVAL
|
||||||
|
set_vim_var_char(c); // Set v:char
|
||||||
|
#endif
|
||||||
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVEPRE);
|
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVEPRE);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef FEAT_RIGHTLEFT
|
#ifdef FEAT_RIGHTLEFT
|
||||||
cmdmsg_rl = FALSE;
|
cmdmsg_rl = FALSE;
|
||||||
@ -2704,6 +2712,9 @@ returncmd:
|
|||||||
need_wait_return = FALSE;
|
need_wait_return = FALSE;
|
||||||
|
|
||||||
// Trigger CmdlineLeave autocommands.
|
// Trigger CmdlineLeave autocommands.
|
||||||
|
#ifdef FEAT_EVAL
|
||||||
|
set_vim_var_char(c); // Set v:char
|
||||||
|
#endif
|
||||||
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVE);
|
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVE);
|
||||||
|
|
||||||
State = save_State;
|
State = save_State;
|
||||||
|
|||||||
@ -25,5 +25,5 @@ int wildmenu_process_key(cmdline_info_T *cclp, int key, expand_T *xp);
|
|||||||
void wildmenu_cleanup(cmdline_info_T *cclp);
|
void wildmenu_cleanup(cmdline_info_T *cclp);
|
||||||
void f_getcompletion(typval_T *argvars, typval_T *rettv);
|
void f_getcompletion(typval_T *argvars, typval_T *rettv);
|
||||||
void f_getcompletiontype(typval_T *argvars, typval_T *rettv);
|
void f_getcompletiontype(typval_T *argvars, typval_T *rettv);
|
||||||
void f_cmdcomplete_info(typval_T *argvars, typval_T *rettv);
|
void f_cmdcomplete_info(typval_T *argvars UNUSED, typval_T *rettv);
|
||||||
/* vim: set ft=c : */
|
/* vim: set ft=c : */
|
||||||
|
|||||||
@ -4918,4 +4918,23 @@ func Test_long_line_noselect()
|
|||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_CmdlineLeave_vchar_keys()
|
||||||
|
func OnLeave()
|
||||||
|
let g:leave_key = v:char
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
new
|
||||||
|
for event in ["CmdlineLeavePre", "CmdlineLeave"]
|
||||||
|
exec "autocmd" event "* :call OnLeave()"
|
||||||
|
for key in ["\<C-C>", "\<Esc>", "\<CR>"]
|
||||||
|
call feedkeys($":echo{key}", 'tx')
|
||||||
|
call assert_equal(key, g:leave_key)
|
||||||
|
endfor
|
||||||
|
exec "autocmd!" event
|
||||||
|
endfor
|
||||||
|
bwipe!
|
||||||
|
delfunc OnLeave
|
||||||
|
unlet g:leave_key
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
|||||||
@ -724,6 +724,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 */
|
||||||
|
/**/
|
||||||
|
1679,
|
||||||
/**/
|
/**/
|
||||||
1678,
|
1678,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user