]> granicus.if.org Git - vim/commitdiff
patch 9.0.0031: <cmod> of user command does not have correct verbose value v9.0.0031
authorzeertzjq <zeertzjq@outlook.com>
Sun, 3 Jul 2022 12:16:09 +0000 (13:16 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 3 Jul 2022 12:16:09 +0000 (13:16 +0100)
Problem:    <cmod> of user command does not have correct verbose value.
Solution:   Use the value from the command modifier. (closes #10651)

runtime/doc/map.txt
src/testdir/test_usercommands.vim
src/usercmd.c
src/version.c

index ee9a61309fbc0fff3cd112eb54e06269c938458f..5efc5076f805654557023bab05e43630a3138ca6 100644 (file)
@@ -1721,10 +1721,10 @@ The valid escape sequences are
                nothing. Supported modifiers are |:aboveleft|, |:belowright|,
                |:botright|, |:browse|, |:confirm|, |:hide|, |:keepalt|,
                |:keepjumps|, |:keepmarks|, |:keeppatterns|, |:leftabove|,
-               |:lockmarks|, |:noswapfile| |:rightbelow|, |:silent|, |:tab|,
-               |:topleft|, |:verbose|, and |:vertical|.
-               Note that these are not yet supported: |:noautocmd|,
-               |:sandbox| and |:unsilent|.
+               |:lockmarks|, |:noautocmd|, |:noswapfile| |:rightbelow|,
+               |:sandbox|, |:silent|, |:tab|, |:topleft|, |:unsilent|,
+               |:verbose|, and |:vertical|.
+               Note that |:filter| is not supported.
                Examples: >
                    command! -nargs=+ -complete=file MyEdit
                                \ for f in expand(<q-args>, 0, 1) |
index 3cb1c8b3fbc1b92a8f57dc2f179f3a0c34ff3e6a..9c75a91972432e9b531a218d7061cb4f393a5d6f 100644 (file)
@@ -58,7 +58,10 @@ function Test_cmdmods()
   call assert_equal('lockmarks', g:mods)
   loc MyCmd
   call assert_equal('lockmarks', g:mods)
-  " noautocmd MyCmd
+  noautocmd MyCmd
+  call assert_equal('noautocmd', g:mods)
+  noa MyCmd
+  call assert_equal('noautocmd', g:mods)
   noswapfile MyCmd
   call assert_equal('noswapfile', g:mods)
   nos MyCmd
@@ -72,29 +75,43 @@ function Test_cmdmods()
   call assert_equal('silent', g:mods)
   sil MyCmd
   call assert_equal('silent', g:mods)
+  silent! MyCmd
+  call assert_equal('silent!', g:mods)
+  sil! MyCmd
+  call assert_equal('silent!', g:mods)
   tab MyCmd
   call assert_equal('tab', g:mods)
   topleft MyCmd
   call assert_equal('topleft', g:mods)
   to MyCmd
   call assert_equal('topleft', g:mods)
-  " unsilent MyCmd
+  unsilent MyCmd
+  call assert_equal('unsilent', g:mods)
+  uns MyCmd
+  call assert_equal('unsilent', g:mods)
   verbose MyCmd
   call assert_equal('verbose', g:mods)
   verb MyCmd
   call assert_equal('verbose', g:mods)
+  0verbose MyCmd
+  call assert_equal('0verbose', g:mods)
+  3verbose MyCmd
+  call assert_equal('3verbose', g:mods)
+  999verbose MyCmd
+  call assert_equal('999verbose', g:mods)
   vertical MyCmd
   call assert_equal('vertical', g:mods)
   vert MyCmd
   call assert_equal('vertical', g:mods)
 
   aboveleft belowright botright browse confirm hide keepalt keepjumps
-             \ keepmarks keeppatterns lockmarks noswapfile silent tab
-             \ topleft verbose vertical MyCmd
+             \ keepmarks keeppatterns lockmarks noautocmd noswapfile silent
+             \ tab topleft unsilent verbose vertical MyCmd
 
   call assert_equal('browse confirm hide keepalt keepjumps ' .
-      \ 'keepmarks keeppatterns lockmarks noswapfile silent ' .
-      \ 'verbose aboveleft belowright botright tab topleft vertical', g:mods)
+      \ 'keepmarks keeppatterns lockmarks noswapfile unsilent noautocmd ' .
+      \ 'silent verbose aboveleft belowright botright tab topleft vertical',
+      \ g:mods)
 
   let g:mods = ''
   command! -nargs=* MyQCmd let g:mods .= '<q-mods> '
index e73f6f64fbfdf3be2082aab35fc6fbd7bd0ef170..1d9c86faece7bb5fd77ef85afa49bb918077a0a2 100644 (file)
@@ -1492,10 +1492,23 @@ produce_cmdmods(char_u *buf, cmdmod_T *cmod, int quote)
                        (cmod->cmod_flags & CMOD_ERRSILENT) ? "silent!"
                                                      : "silent", &multi_mods);
     // :verbose
-    if (p_verbose > 0)
-       result += add_cmd_modifier(buf, "verbose", &multi_mods);
+    if (cmod->cmod_verbose > 0)
+    {
+       int verbose_value = cmod->cmod_verbose - 1;
+
+       if (verbose_value == 1)
+           result += add_cmd_modifier(buf, "verbose", &multi_mods);
+       else
+       {
+           char verbose_buf[NUMBUFLEN];
+
+           sprintf(verbose_buf, "%dverbose", verbose_value);
+           result += add_cmd_modifier(buf, verbose_buf, &multi_mods);
+       }
+    }
     // flags from cmod->cmod_split
     result += add_win_cmd_modifers(buf, cmod, &multi_mods);
+
     if (quote && buf != NULL)
     {
        buf += result - 2;
index cb69e41930441c51d09a55c08df1fedb2dc698d6..a37840a99a59088c39fa8863c7b571422040b635 100644 (file)
@@ -735,6 +735,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    31,
 /**/
     30,
 /**/