changeset 9667:c27052511998 v7.4.2110

commit https://github.com/vim/vim/commit/eac784eced501c54d2c99e18a1af96cd996f3a6c Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jul 28 22:08:24 2016 +0200 patch 7.4.2110 Problem: When there is an CmdUndefined autocmd then the error for a missing command is E464 instead of E492. (Manuel Ortega) Solution: Don't let the pointer be NULL.
author Christian Brabandt <cb@256bit.org>
date Thu, 28 Jul 2016 22:15:06 +0200
parents d190f1077a34
children 7d1ab1664b75
files src/ex_docmd.c src/testdir/test_usercommands.vim src/version.c
diffstat 3 files changed, 33 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2343,7 +2343,7 @@ do_one_cmd(
 	vim_free(p);
 	/* If the autocommands did something and didn't cause an error, try
 	 * finding the command again. */
-	p = (ret && !aborting()) ? find_command(&ea, NULL) : NULL;
+	p = (ret && !aborting()) ? find_command(&ea, NULL) : ea.cmd;
     }
 #endif
 
--- a/src/testdir/test_usercommands.vim
+++ b/src/testdir/test_usercommands.vim
@@ -46,3 +46,33 @@ function Test_cmdmods()
   delcommand MyQCmd
   unlet g:mods
 endfunction
+
+func Test_Ambiguous()
+  command Doit let g:didit = 'yes'
+  command Dothat let g:didthat = 'also'
+  call assert_fails('Do', 'E464:')
+  Doit
+  call assert_equal('yes', g:didit)
+  Dothat
+  call assert_equal('also', g:didthat)
+  unlet g:didit
+  unlet g:didthat
+
+  delcommand Doit
+  Do
+  call assert_equal('also', g:didthat)
+  delcommand Dothat
+endfunc
+
+func Test_CmdUndefined()
+  call assert_fails('Doit', 'E492:')
+  au CmdUndefined Doit :command Doit let g:didit = 'yes'
+  Doit
+  call assert_equal('yes', g:didit)
+  delcommand Doit
+
+  call assert_fails('Dothat', 'E492:')
+  au CmdUndefined * let g:didnot = 'yes'
+  call assert_fails('Dothat', 'E492:')
+  call assert_equal('yes', g:didnot)
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -759,6 +759,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2110,
+/**/
     2109,
 /**/
     2108,