To: vim_dev@googlegroups.com Subject: Patch 7.4.2237 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.2237 Problem: Can't use "." and "$" with ":tab". Solution: Support a range for ":tab". (Hirohito Higashi) Files: runtime/doc/tabpage.txt, src/ex_docmd.c, src/testdir/test_tabpage.vim *** ../vim-7.4.2236/runtime/doc/tabpage.txt 2015-09-08 18:46:04.341233631 +0200 --- runtime/doc/tabpage.txt 2016-08-21 18:39:17.503780423 +0200 *************** *** 87,100 **** 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. Examples: > ! :tab split " opens current buffer in new tab page ! :tab help gt " opens tab page with help for "gt" CTRL-W gf Open a new tab page and edit the file name under the cursor. See |CTRL-W_gf|. --- 87,107 ---- Execute {cmd} and when it opens a new window open a new tab page instead. Doesn't work for |:diffsplit|, |:diffpatch|, |:execute| and |:normal|. ! 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 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,150 **** given, then they become hidden. But modified buffers are never abandoned, so changes cannot get lost. > :tabonly " close all tab pages except the current :{count}tabo[nly][!] Close all tab pages except the {count}th one. > ! :.tabonly " one :-tabonly " close all tab pages except the previous " one :+tabonly " close all tab pages except the next one --- 148,158 ---- 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 " as above :-tabonly " close all tab pages except the previous " one :+tabonly " close all tab pages except the next one *** ../vim-7.4.2236/src/ex_docmd.c 2016-07-30 19:39:23.487649548 +0200 --- src/ex_docmd.c 2016-08-21 18:39:17.507780388 +0200 *************** *** 1858,1866 **** /* * 2. Handle command modifiers. */ ! p = ea.cmd; ! if (VIM_ISDIGIT(*ea.cmd)) ! p = skipwhite(skipdigits(ea.cmd)); switch (*p) { /* When adding an entry, also modify cmd_exists(). */ --- 1858,1864 ---- /* * 2. Handle command modifiers. */ ! p = skip_range(ea.cmd, NULL); switch (*p) { /* When adding an entry, also modify cmd_exists(). */ *************** *** 1992,2001 **** case 't': if (checkforcmd(&p, "tab", 3)) { #ifdef FEAT_WINDOWS ! if (vim_isdigit(*ea.cmd)) ! cmdmod.tab = atoi((char *)ea.cmd) + 1; ! else cmdmod.tab = tabpage_index(curtab) + 1; ea.cmd = p; #endif continue; --- 1990,2008 ---- case 't': if (checkforcmd(&p, "tab", 3)) { #ifdef FEAT_WINDOWS ! 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; *** ../vim-7.4.2236/src/testdir/test_tabpage.vim 2016-08-18 22:11:27.036228825 +0200 --- src/testdir/test_tabpage.vim 2016-08-21 18:39:17.507780388 +0200 *************** *** 186,189 **** --- 186,221 ---- 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 *** ../vim-7.4.2236/src/version.c 2016-08-21 17:44:57.440487201 +0200 --- src/version.c 2016-08-21 18:40:38.479059554 +0200 *************** *** 765,766 **** --- 765,768 ---- { /* Add new patch number below this line */ + /**/ + 2237, /**/ -- hundred-and-one symptoms of being an internet addict: 42. Your virtual girlfriend finds a new net sweetheart with a larger bandwidth. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///