From 9359e8a6d99fe2abfcbb9603339f1740d8870cc6 Mon Sep 17 00:00:00 2001 From: zeertzjq <zeertzjq@outlook.com> Date: Sun, 3 Jul 2022 13:16:09 +0100 Subject: [PATCH] patch 9.0.0031: <cmod> of user command does not have correct verbose value 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 | 8 ++++---- src/testdir/test_usercommands.vim | 29 +++++++++++++++++++++++------ src/usercmd.c | 17 +++++++++++++++-- src/version.c | 2 ++ 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt index ee9a61309..5efc5076f 100644 --- a/runtime/doc/map.txt +++ b/runtime/doc/map.txt @@ -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) | diff --git a/src/testdir/test_usercommands.vim b/src/testdir/test_usercommands.vim index 3cb1c8b3f..9c75a9197 100644 --- a/src/testdir/test_usercommands.vim +++ b/src/testdir/test_usercommands.vim @@ -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> ' diff --git a/src/usercmd.c b/src/usercmd.c index e73f6f64f..1d9c86fae 100644 --- a/src/usercmd.c +++ b/src/usercmd.c @@ -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; diff --git a/src/version.c b/src/version.c index cb69e4193..a37840a99 100644 --- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 31, /**/ 30, /**/ -- 2.40.0