summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-01-31 15:48:32 +0100
committerBram Moolenaar <Bram@vim.org>2018-01-31 15:48:32 +0100
commit153b704e20f9c269450a7d3ea8cafcf942579ab7 (patch)
treeab9438b2370889b2f49320fae762525be1ad3562
parentec0557f08b2660118eaedb94471e5ab0f87cf2a3 (diff)
patch 8.0.1445: cannot act on edits in the command linev8.0.1445
Problem: Cannot act on edits in the command line. Solution: Add the CmdlineChanged autocommand event. (xtal8, closes #2603, closes #2524)
-rw-r--r--runtime/doc/autocmd.txt9
-rw-r--r--src/ex_getln.c5
-rw-r--r--src/fileio.c1
-rw-r--r--src/testdir/test_autocmd.vim12
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h1
6 files changed, 29 insertions, 1 deletions
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 173892cd47..4adf007e7b 100644
--- 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 used but it isn't
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
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 421c6b7d58..837d29998f 100644
--- 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
index ba9ec9ec0a..fb5af64466 100644
--- 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
index d8fddffebb..b7d43b59ad 100644
--- 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
diff --git a/src/version.c b/src/version.c
index bab773660f..dad2715559 100644
--- 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
index 4765b783b5..1f9671a187 100644
--- 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 */