changeset 13142:59a16624400a v8.0.1445

patch 8.0.1445: cannot act on edits in the command line commit https://github.com/vim/vim/commit/153b704e20f9c269450a7d3ea8cafcf942579ab7 Author: Bram Moolenaar <Bram@vim.org> 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)
author Christian Brabandt <cb@256bit.org>
date Wed, 31 Jan 2018 16:00:07 +0100
parents 8510122958cc
children cf4e3ef40ba4
files runtime/doc/autocmd.txt src/ex_getln.c src/fileio.c src/testdir/test_autocmd.vim src/version.c src/vim.h
diffstat 6 files changed, 29 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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.
+				<afile> 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
--- 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.
--- 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},
--- 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'\<CR>", 'xt')
+  call assert_equal("echom 'hello'", g:text)
+  au! CmdlineChanged
+
+  au! CmdlineChanged : let g:entered = expand('<afile>')
+  let g:entered = 0
+  call feedkeys(":echom 'hello'\<CR>", 'xt')
+  call assert_equal(':', g:entered)
+  au! CmdlineChanged
+
   au! CmdlineEnter : let g:entered = expand('<afile>')
   au! CmdlineLeave : let g:left = expand('<afile>')
   let g:entered = 0
--- 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,
--- 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 */