patch 9.1.1679: unclear what key causes CmdlineLeave autocommand Commit: https://github.com/vim/vim/commit/ba9551d131d608b71155bacc0c4a65264f1f5f7c Author: Girish Palya <giris...@gmail.com> Date: Sat Aug 23 18:08:27 2025 +0200
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 <giris...@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index d11cb1f18..f5ccae214 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -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 @@ -644,6 +644,8 @@ CmdlineLeave Before leaving the command line; including <afile> is set to a single character, indicating the type of command-line. |cmdwin-char| + Sets the |v:char| to the key that exited the + command-line (e.g. <CR>, <CTRL-C>, <Esc>). *CmdlineLeavePre* CmdlineLeavePre Just before leaving the command line, and 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 character indicating the command-line type. See |cmdwin-char| for details. + Sets |v:char| as with |CmdlineLeave|. *CmdwinEnter* CmdwinEnter After entering the command-line window. Useful for setting options specifically for diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 01ab14203..c13e3a0b7 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -2227,8 +2227,8 @@ v:beval_winid The |window-ID| of the window, over which the mouse pointer *v:char* *char-variable* v:char Argument for evaluating 'formatexpr' and used for the typed character when using <expr> in an abbreviation |:map-<expr>|. - It is also used by the |InsertCharPre|, |InsertEnter| and - |KeyInputPre| events. + It is also used by the |InsertCharPre|, |InsertEnter|, + |KeyInputPre|, |CmdlineLeave| and |CmdlineLeavePre| events. *v:charconvert_from* *charconvert_from-variable* v:charconvert_from diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 1daf2f191..b82071757 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -41750,6 +41750,8 @@ Others: ~ ANGLE BRACKET "]>". - Support for Unix domain sockets have been added for the clientserver feature, see |socketserver-clientserver|. +- |CmdlineLeave| sets |v:char| to the character that caused exiting the + Command-line. Platform specific ~ - MS-Winodws: Paths like "\Windows" and "/Windows" are now considered to be diff --git a/src/ex_getln.c b/src/ex_getln.c index 3f5f852a4..289231045 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -1980,6 +1980,9 @@ getcmdline_int( #endif || c == Ctrl_C)) { +#ifdef FEAT_EVAL + set_vim_var_char(c); // Set v:char +#endif trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVEPRE); event_cmdlineleavepre_triggered = TRUE; #if defined(FEAT_SEARCH_EXTRA) || defined(PROTO) @@ -2646,7 +2649,12 @@ cmdline_changed: returncmd: // Trigger CmdlineLeavePre autocommands if not already triggered. if (!event_cmdlineleavepre_triggered) + { +#ifdef FEAT_EVAL + set_vim_var_char(c); // Set v:char +#endif trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVEPRE); + } #ifdef FEAT_RIGHTLEFT cmdmsg_rl = FALSE; @@ -2704,6 +2712,9 @@ returncmd: need_wait_return = FALSE; // Trigger CmdlineLeave autocommands. +#ifdef FEAT_EVAL + set_vim_var_char(c); // Set v:char +#endif trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVE); State = save_State; diff --git a/src/proto/cmdexpand.pro b/src/proto/cmdexpand.pro index a2f6a16d4..69e7da9be 100644 --- a/src/proto/cmdexpand.pro +++ b/src/proto/cmdexpand.pro @@ -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 f_getcompletion(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 : */ diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 2ae27da7f..3f8cb2d8f 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -4918,4 +4918,23 @@ func Test_long_line_noselect() call StopVimInTerminal(buf) 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 diff --git a/src/version.c b/src/version.c index a9f345547..98ecbc99a 100644 --- a/src/version.c +++ b/src/version.c @@ -724,6 +724,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1679, /**/ 1678, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1upqtT-00FAQe-4Z%40256bit.org.