diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-10-18 20:46:42 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-18 20:46:42 +0800 |
commit | 4d896be681d9b93ebe34cce38a5e787cd0332261 (patch) | |
tree | 72b1085e2b36851eb39c6c2dc276c2ff13329c40 | |
parent | 97164748b933a351423824b1988c863cc5994cdb (diff) | |
download | rneovim-4d896be681d9b93ebe34cce38a5e787cd0332261.tar.gz rneovim-4d896be681d9b93ebe34cce38a5e787cd0332261.tar.bz2 rneovim-4d896be681d9b93ebe34cce38a5e787cd0332261.zip |
vim-patch:9.0.0786: user command does not get number from :tab modifier (#20716)
Problem: User command does not get number from :tab modifier.
Solution: Include the number. (closes vim/vim#11393, closes vim/vim#6901)
https://github.com/vim/vim/commit/208567e9d744ef7b89bed1f62e951ae4ee2f6f5f
-rw-r--r-- | src/nvim/testdir/test_usercommands.vim | 13 | ||||
-rw-r--r-- | src/nvim/usercmd.c | 14 |
2 files changed, 25 insertions, 2 deletions
diff --git a/src/nvim/testdir/test_usercommands.vim b/src/nvim/testdir/test_usercommands.vim index 1065dd16e2..12fe39851d 100644 --- a/src/nvim/testdir/test_usercommands.vim +++ b/src/nvim/testdir/test_usercommands.vim @@ -79,6 +79,19 @@ function Test_cmdmods() call assert_equal('silent!', g:mods) tab MyCmd call assert_equal('tab', g:mods) + 0tab MyCmd + call assert_equal('0tab', g:mods) + tab split + tab MyCmd + call assert_equal('tab', g:mods) + 1tab MyCmd + call assert_equal('1tab', g:mods) + tabprev + tab MyCmd + call assert_equal('tab', g:mods) + 2tab MyCmd + call assert_equal('2tab', g:mods) + 2tabclose topleft MyCmd call assert_equal('topleft', g:mods) to MyCmd diff --git a/src/nvim/usercmd.c b/src/nvim/usercmd.c index 0e045c773f..4c2ea75047 100644 --- a/src/nvim/usercmd.c +++ b/src/nvim/usercmd.c @@ -1236,8 +1236,18 @@ size_t add_win_cmd_modifers(char *buf, const cmdmod_T *cmod, bool *multi_mods) // :tab if (cmod->cmod_tab > 0) { - result += add_cmd_modifier(buf, "tab", multi_mods); + int tabnr = cmod->cmod_tab - 1; + if (tabnr == tabpage_index(curtab)) { + // For compatibility, don't add a tabpage number if it is the same + // as the default number for :tab. + result += add_cmd_modifier(buf, "tab", multi_mods); + } else { + char tab_buf[NUMBUFLEN + 3]; + snprintf(tab_buf, sizeof(tab_buf), "%dtab", tabnr); + result += add_cmd_modifier(buf, tab_buf, multi_mods); + } } + // :topleft if (cmod->cmod_split & WSP_TOP) { result += add_cmd_modifier(buf, "topleft", multi_mods); @@ -1307,7 +1317,7 @@ size_t uc_mods(char *buf, const cmdmod_T *cmod, bool quote) result += add_cmd_modifier(buf, "verbose", &multi_mods); } else { char verbose_buf[NUMBUFLEN]; - snprintf(verbose_buf, NUMBUFLEN, "%dverbose", verbose_value); + snprintf(verbose_buf, sizeof(verbose_buf), "%dverbose", verbose_value); result += add_cmd_modifier(buf, verbose_buf, &multi_mods); } } |