diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-08-21 19:07:17 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-08-21 19:07:17 +0200 |
commit | 9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c (patch) | |
tree | ef3886176e8111bad2543299f5e96f3af2f37e60 | |
parent | 920694c1b60fac8017b8909efcc24f189804a9bb (diff) |
patch 7.4.2237v7.4.2237
Problem: Can't use "." and "$" with ":tab".
Solution: Support a range for ":tab". (Hirohito Higashi)
-rw-r--r-- | runtime/doc/tabpage.txt | 24 | ||||
-rw-r--r-- | src/ex_docmd.c | 19 | ||||
-rw-r--r-- | src/testdir/test_tabpage.vim | 32 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 63 insertions, 14 deletions
diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt index b98c18b02c..f2444c017f 100644 --- a/runtime/doc/tabpage.txt +++ b/runtime/doc/tabpage.txt @@ -87,14 +87,21 @@ In the GUI tab pages line you can use the right mouse button to open menu. Execute {cmd} and when it opens a new window open a new tab page instead. Doesn't work for |:diffsplit|, |:diffpatch|, |:execute| and |:normal|. - When [count] is omitted the tab page appears after the current - one. - When [count] is specified the new tab page comes after tab - page [count]. Use ":0tab cmd" to get the new tab page as the - first one. + If [count] is given the new tab page appears after the tab + page [count] otherwise the new tab page will appear after the + current one. Examples: > - :tab split " opens current buffer in new tab page - :tab help gt " opens tab page with help for "gt" + :tab split " opens current buffer in new tab page + :tab help gt " opens tab page with help for "gt" + :.tab help gt " as above + :+tab help " opens tab page with help after the next + " tab page + :-tab help " opens tab page with help before the + " current one + :0tab help " opens tab page with help before the + " first one + :$tab help " opens tab page with help after the last + " one CTRL-W gf Open a new tab page and edit the file name under the cursor. See |CTRL-W_gf|. @@ -141,10 +148,11 @@ something else. given, then they become hidden. But modified buffers are never abandoned, so changes cannot get lost. > :tabonly " close all tab pages except the current + " one :{count}tabo[nly][!] Close all tab pages except the {count}th one. > - :.tabonly " one + :.tabonly " as above :-tabonly " close all tab pages except the previous " one :+tabonly " close all tab pages except the next one diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 1a7fbfabb7..9f1d2279d3 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -1858,9 +1858,7 @@ do_one_cmd( /* * 2. Handle command modifiers. */ - p = ea.cmd; - if (VIM_ISDIGIT(*ea.cmd)) - p = skipwhite(skipdigits(ea.cmd)); + p = skip_range(ea.cmd, NULL); switch (*p) { /* When adding an entry, also modify cmd_exists(). */ @@ -1992,10 +1990,19 @@ do_one_cmd( case 't': if (checkforcmd(&p, "tab", 3)) { #ifdef FEAT_WINDOWS - if (vim_isdigit(*ea.cmd)) - cmdmod.tab = atoi((char *)ea.cmd) + 1; - else + long tabnr = get_address(&ea, &ea.cmd, ADDR_TABS, + ea.skip, FALSE); + if (tabnr == MAXLNUM) cmdmod.tab = tabpage_index(curtab) + 1; + else + { + if (tabnr < 0 || tabnr > LAST_TAB_NR) + { + errormsg = (char_u *)_(e_invrange); + goto doend; + } + cmdmod.tab = tabnr + 1; + } ea.cmd = p; #endif continue; diff --git a/src/testdir/test_tabpage.vim b/src/testdir/test_tabpage.vim index e6b85d6e14..f1c41e967b 100644 --- a/src/testdir/test_tabpage.vim +++ b/src/testdir/test_tabpage.vim @@ -186,4 +186,36 @@ function Test_tabpage_with_autocmd() bw! endfunction +function Test_tabpage_with_tab_modifier() + for n in range(4) + tabedit + endfor + + function s:check_tab(pre_nr, cmd, post_nr) + exec 'tabnext ' . a:pre_nr + exec a:cmd + call assert_equal(a:post_nr, tabpagenr()) + call assert_equal('help', &filetype) + helpclose + endfunc + + call s:check_tab(1, 'tab help', 2) + call s:check_tab(1, '3tab help', 4) + call s:check_tab(1, '.tab help', 2) + call s:check_tab(1, '.+1tab help', 3) + call s:check_tab(1, '0tab help', 1) + call s:check_tab(2, '+tab help', 4) + call s:check_tab(2, '+2tab help', 5) + call s:check_tab(4, '-tab help', 4) + call s:check_tab(4, '-2tab help', 3) + call s:check_tab(3, '$tab help', 6) + call assert_fails('99tab help', 'E16:') + call assert_fails('+99tab help', 'E16:') + call assert_fails('-99tab help', 'E16:') + + delfunction s:check_tab + tabonly! + bw! +endfunction + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 8b8653190d..fe60c32489 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2237, +/**/ 2236, /**/ 2235, |