changeset 24624:c6aaf1742634 v8.2.2851

patch 8.2.2851: using <Cmd> mapping on the command line triggers CmdlineChanged Commit: https://github.com/vim/vim/commit/847fe7d750001a46a09b97ad57286612d0be8100 Author: Bram Moolenaar <Bram@vim.org> Date: Sat May 15 13:19:16 2021 +0200 patch 8.2.2851: using <Cmd> mapping on the command line triggers CmdlineChanged Problem: Using <Cmd> mapping on the command line triggers CmdlineChanged. (Naohiro Ono) Solution: Jump to cmdline_not_changed if the command line didn't change. (closes #8208)
author Bram Moolenaar <Bram@vim.org>
date Sat, 15 May 2021 13:30:02 +0200
parents 99ec3d98043f
children 4bb3aeaba950
files src/ex_getln.c src/testdir/test_cmdline.vim src/version.c
diffstat 3 files changed, 32 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1757,9 +1757,17 @@ getcmdline_int(
 	    c = safe_vgetc();
 	} while (c == K_IGNORE || c == K_NOP);
 
-	if (c == K_COMMAND
-		   && do_cmdline(NULL, getcmdkeycmd, NULL, DOCMD_NOWAIT) == OK)
-	    goto cmdline_changed;
+	if (c == K_COMMAND)
+	{
+	    int	    clen = ccline.cmdlen;
+
+	    if (do_cmdline(NULL, getcmdkeycmd, NULL, DOCMD_NOWAIT) == OK)
+	    {
+		if (clen == ccline.cmdlen)
+		    goto cmdline_not_changed;
+		goto cmdline_changed;
+	    }
+	}
 
 	if (KeyTyped)
 	{
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -1799,4 +1799,23 @@ func Test_recalling_cmdline()
   cunmap <Plug>(save-cmdline)
 endfunc
 
+func Test_cmd_map_cmdlineChanged()
+  let g:log = []
+  cnoremap <F1> l<Cmd><CR>s
+  augroup test
+    autocmd!
+    autocmd CmdlineChanged : let g:log += [getcmdline()]
+  augroup END
+
+  call feedkeys(":\<F1>\<CR>", 'xt')
+  call assert_equal(['l', 'ls'], g:log)
+
+  unlet g:log
+  cunmap <F1>
+  augroup test
+    autocmd!
+  augroup END
+endfunc
+
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2851,
+/**/
     2850,
 /**/
     2849,