Patch 8.2.3149 (after 8.2.3141)
Problem: Some plugins have a problem with the error check for using
:command with -complete but without -nargs.
Solution: In legacy script only give a warning message.
Files: src/usercmd.c, src/message.c, src/proto/
message.pro,
src/testdir/test_usercommands.vim
*** ../vim-8.2.3148/src/usercmd.c 2021-07-11 14:28:19.943563551 +0200
--- src/usercmd.c 2021-07-11 18:57:29.686993922 +0200
***************
*** 1027,1033 ****
&& STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0))
emsg(_("E841: Reserved name, cannot be used for user defined command"));
else if (compl > 0 && (argt & EX_EXTRA) == 0)
! emsg(_(e_complete_used_without_nargs));
else
uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
addr_type_arg, eap->forceit);
--- 1027,1041 ----
&& STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0))
emsg(_("E841: Reserved name, cannot be used for user defined command"));
else if (compl > 0 && (argt & EX_EXTRA) == 0)
! {
! // Some plugins rely on silently ignoring the mistake, only make this
! // an error in Vim9 script.
! if (in_vim9script())
! emsg(_(e_complete_used_without_nargs));
! else
! give_warning_with_source(
! (char_u *)_(e_complete_used_without_nargs), TRUE, TRUE);
! }
else
uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
addr_type_arg, eap->forceit);
*** ../vim-8.2.3148/src/message.c 2021-06-15 22:39:07.566028108 +0200
--- src/message.c 2021-07-11 19:03:23.094520449 +0200
***************
*** 3614,3619 ****
--- 3614,3625 ----
void
give_warning(char_u *message, int hl)
{
+ give_warning_with_source(message, hl, FALSE);
+ }
+
+ void
+ give_warning_with_source(char_u *message, int hl, int with_source)
+ {
// Don't do this for ":silent".
if (msg_silent != 0)
return;
***************
*** 3629,3636 ****
keep_msg_attr = HL_ATTR(HLF_W);
else
keep_msg_attr = 0;
! if (msg_attr((char *)message, keep_msg_attr) && msg_scrolled == 0)
set_keep_msg(message, keep_msg_attr);
msg_didout = FALSE; // overwrite this message
msg_nowait = TRUE; // don't wait for this message
msg_col = 0;
--- 3635,3655 ----
keep_msg_attr = HL_ATTR(HLF_W);
else
keep_msg_attr = 0;
!
! if (with_source)
! {
! // Do what msg() does, but with a column offset if the warning should
! // be after the mode message.
! msg_start();
! msg_source(HL_ATTR(HLF_W));
! msg_puts(" ");
! msg_puts_attr((char *)message, HL_ATTR(HLF_W) | MSG_HIST);
! msg_clr_eos();
! (void)msg_end();
! }
! else if (msg_attr((char *)message, keep_msg_attr) && msg_scrolled == 0)
set_keep_msg(message, keep_msg_attr);
+
msg_didout = FALSE; // overwrite this message
msg_nowait = TRUE; // don't wait for this message
msg_col = 0;
*** ../vim-8.2.3148/src/proto/
message.pro 2020-02-29 17:38:08.862485886 +0100
--- src/proto/
message.pro 2021-07-11 18:56:58.087033112 +0200
***************
*** 69,74 ****
--- 69,75 ----
void verbose_stop(void);
int verbose_open(void);
void give_warning(char_u *message, int hl);
+ void give_warning_with_source(char_u *message, int hl, int with_source);
void give_warning2(char_u *message, char_u *a1, int hl);
void msg_advance(int col);
int do_dialog(int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd);
*** ../vim-8.2.3148/src/testdir/test_usercommands.vim 2021-07-11 14:28:19.943563551 +0200
--- src/testdir/test_usercommands.vim 2021-07-11 19:10:18.833912848 +0200
***************
*** 1,5 ****
--- 1,7 ----
" Tests for user defined commands
+ source vim9.vim
+
" Test for <mods> in user defined commands
function Test_cmdmods()
let g:mods = ''
***************
*** 270,282 ****
call assert_fails('com! -complete=custom DoCmd :', 'E467:')
call assert_fails('com! -complete=customlist DoCmd :', 'E467:')
call assert_fails('com! -complete=behave,CustomComplete DoCmd :', 'E468:')
- call assert_fails('com! -complete=file DoCmd :', 'E1208:')
- call assert_fails('com! -nargs=0 -complete=file DoCmd :', 'E1208:')
call assert_fails('com! -nargs=x DoCmd :', 'E176:')
call assert_fails('com! -count=1 -count=2 DoCmd :', 'E177:')
call assert_fails('com! -count=x DoCmd :', 'E178:')
call assert_fails('com! -range=x DoCmd :', 'E178:')
com! -nargs=0 DoCmd :
call assert_fails('DoCmd x', 'E488:')
--- 272,300 ----
call assert_fails('com! -complete=custom DoCmd :', 'E467:')
call assert_fails('com! -complete=customlist DoCmd :', 'E467:')
call assert_fails('com! -complete=behave,CustomComplete DoCmd :', 'E468:')
call assert_fails('com! -nargs=x DoCmd :', 'E176:')
call assert_fails('com! -count=1 -count=2 DoCmd :', 'E177:')
call assert_fails('com! -count=x DoCmd :', 'E178:')
call assert_fails('com! -range=x DoCmd :', 'E178:')
+ com! -complete=file DoCmd :
+ call assert_match('E1208:', v:warningmsg)
+ let v:warningmsg = ''
+ com! -nargs=0 -complete=file DoCmd :
+ call assert_match('E1208:', v:warningmsg)
+
+ let lines =<< trim END
+ vim9script
+ com! -complete=file DoCmd :
+ END
+ call CheckScriptFailure(lines, 'E1208', 2)
+
+ let lines =<< trim END
+ vim9script
+ com! -nargs=0 -complete=file DoCmd :
+ END
+ call CheckScriptFailure(lines, 'E1208', 2)
+
com! -nargs=0 DoCmd :
call assert_fails('DoCmd x', 'E488:')
*** ../vim-8.2.3148/src/version.c 2021-07-11 18:23:15.441471695 +0200
--- src/version.c 2021-07-11 18:46:40.651594168 +0200
***************
*** 757,758 ****
--- 757,760 ----
{ /* Add new patch number below this line */
+ /**/
+ 3149,
/**/
--
An actual excerpt from a classified section of a city newspaper:
"Illiterate? Write today for free help!"
/// Bram Moolenaar -- Br...@Moolenaar.net --
http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims --
http://ICCF-Holland.org ///