# HG changeset patch # User Christian Brabandt # Date 1517410807 -3600 # Node ID 59a16624400a2e4b8f4bd58767c783de0ec9c738 # Parent 8510122958cca8c656f7658f86d85d3865d35a04 patch 8.0.1445: cannot act on edits in the command line commit https://github.com/vim/vim/commit/153b704e20f9c269450a7d3ea8cafcf942579ab7 Author: Bram Moolenaar Date: Wed Jan 31 15:48:32 2018 +0100 patch 8.0.1445: cannot act on edits in the command line Problem: Cannot act on edits in the command line. Solution: Add the CmdlineChanged autocommand event. (xtal8, closes https://github.com/vim/vim/issues/2603, closes #2524) diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -1,4 +1,4 @@ -*autocmd.txt* For Vim version 8.0. Last change: 2017 Dec 17 +*autocmd.txt* For Vim version 8.0. Last change: 2018 Jan 31 VIM REFERENCE MANUAL by Bram Moolenaar @@ -500,6 +500,13 @@ CmdUndefined When a user command is us command is defined. An alternative is to always define the user command and have it invoke an autoloaded function. See |autoload|. + *CmdlineChanged* +CmdlineChanged After a change was made to the text inside + command line. Be careful not to mess up the + command line, it may cause Vim to lock up. + is set to a single character, + indicating the type of command-line. + |cmdwin-char| *CmdlineEnter* CmdlineEnter After moving the cursor to the command line, where the user can type a command or search diff --git a/src/ex_getln.c b/src/ex_getln.c --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -1951,6 +1951,11 @@ cmdline_not_changed: #endif cmdline_changed: +#ifdef FEAT_AUTOCMD + /* Trigger CmdlineChanged autocommands. */ + trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED); +#endif + #ifdef FEAT_SEARCH_EXTRA /* * 'incsearch' highlighting. diff --git a/src/fileio.c b/src/fileio.c --- a/src/fileio.c +++ b/src/fileio.c @@ -7786,6 +7786,7 @@ static struct event_name {"BufWritePost", EVENT_BUFWRITEPOST}, {"BufWritePre", EVENT_BUFWRITEPRE}, {"BufWriteCmd", EVENT_BUFWRITECMD}, + {"CmdlineChanged", EVENT_CMDLINECHANGED}, {"CmdlineEnter", EVENT_CMDLINEENTER}, {"CmdlineLeave", EVENT_CMDLINELEAVE}, {"CmdwinEnter", EVENT_CMDWINENTER}, diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -812,6 +812,18 @@ func Test_QuitPre() endfunc func Test_Cmdline() + au! CmdlineChanged : let g:text = getcmdline() + let g:text = 0 + call feedkeys(":echom 'hello'\", 'xt') + call assert_equal("echom 'hello'", g:text) + au! CmdlineChanged + + au! CmdlineChanged : let g:entered = expand('') + let g:entered = 0 + call feedkeys(":echom 'hello'\", 'xt') + call assert_equal(':', g:entered) + au! CmdlineChanged + au! CmdlineEnter : let g:entered = expand('') au! CmdlineLeave : let g:left = expand('') let g:entered = 0 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -772,6 +772,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1445, +/**/ 1444, /**/ 1443, diff --git a/src/vim.h b/src/vim.h --- a/src/vim.h +++ b/src/vim.h @@ -1269,6 +1269,7 @@ enum auto_event EVENT_BUFWRITEPOST, /* after writing a buffer */ EVENT_BUFWRITEPRE, /* before writing a buffer */ EVENT_BUFWRITECMD, /* write buffer using command */ + EVENT_CMDLINECHANGED, /* command line was modified*/ EVENT_CMDLINEENTER, /* after entering the command line */ EVENT_CMDLINELEAVE, /* before leaving the command line */ EVENT_CMDWINENTER, /* after entering the cmdline window */