]> granicus.if.org Git - vim/commitdiff
patch 8.2.2851: using <Cmd> mapping on the command line triggers CmdlineChanged v8.2.2851
authorBram Moolenaar <Bram@vim.org>
Sat, 15 May 2021 11:19:16 +0000 (13:19 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 15 May 2021 11:19:16 +0000 (13:19 +0200)
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)

src/ex_getln.c
src/testdir/test_cmdline.vim
src/version.c

index a9f33e6ec28e04013cf38ddd64c411343104ee3f..e87b208cc29001dd453e10048d65ec068bb1029e 100644 (file)
@@ -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)
        {
index 7df80b03305293d24145c00ae7c7aa37366dc821..5ed283f1fa24330d4db39a505a214938f8e99a51 100644 (file)
@@ -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
index 83c773f23429f24ece77e29b8ec844b08b1233fe..0d3c2ad52bd579d9017efc6d7d0942aa16d9c2e3 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2851,
 /**/
     2850,
 /**/