Mercurial > vim
changeset 21727:860cad58f557 v8.2.1413
patch 8.2.1413: previous tab page not usable from an Ex command
Commit: https://github.com/vim/vim/commit/94f4ffa7704921a3634e56b878e6dc362bc3d508
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Aug 10 19:21:15 2020 +0200
patch 8.2.1413: previous tab page not usable from an Ex command
Problem: Previous tab page not usable from an Ex command.
Solution: Add the "#" argument for :tabnext et al. (Yegappan Lakshmanan,
closes #6677)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 10 Aug 2020 19:30:04 +0200 |
parents | c4d9bcbaf320 |
children | 6329ff6950ff |
files | runtime/doc/tabpage.txt src/ex_docmd.c src/testdir/test_tabpage.vim src/version.c src/window.c |
diffstat | 5 files changed, 49 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/tabpage.txt +++ b/runtime/doc/tabpage.txt @@ -142,6 +142,7 @@ something else. :tabclose + " close the next tab page :tabclose 3 " close the third tab page :tabclose $ " close the last tab page + :tabclose # " close the last accessed tab page < *:tabo* *:tabonly* :tabo[nly][!] Close all other tab pages. @@ -170,6 +171,8 @@ something else. " one :tabonly 1 " close all tab pages except the first one :tabonly $ " close all tab pages except the last one + :tabonly # " close all tab pages except the last + " accessed one SWITCHING TO ANOTHER TAB PAGE: @@ -192,6 +195,7 @@ gt *i_CTRL-<PageDown>* *i_<C-PageDow :+2tabnext " go to the two next tab page :1tabnext " go to the first tab page :$tabnext " go to the last tab page + :tabnext # " go to the last accessed tab page :tabnext $ " as above :tabnext - " go to the previous tab page :tabnext -1 " as above @@ -255,6 +259,8 @@ REORDERING TAB PAGES: :tabmove " move the tab page to the last :$tabmove " as above :tabmove $ " as above + :tabmove # " move the tab page after the last accessed + " tab page :tabm[ove] +[N] :tabm[ove] -[N]
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -5412,6 +5412,15 @@ get_tabpage_arg(exarg_T *eap) { if (STRCMP(p, "$") == 0) tab_number = LAST_TAB_NR; + else if (STRCMP(p, "#") == 0) + if (valid_tabpage(lastused_tabpage)) + tab_number = tabpage_index(lastused_tabpage); + else + { + eap->errmsg = ex_errmsg(e_invargval, eap->arg); + tab_number = 0; + goto theend; + } else if (p == p_save || *p_save == '-' || *p != NUL || tab_number > LAST_TAB_NR) {
--- a/src/testdir/test_tabpage.vim +++ b/src/testdir/test_tabpage.vim @@ -784,6 +784,7 @@ func Test_lastused_tabpage() call assert_beeps('call feedkeys("g\<Tab>", "xt")') call assert_beeps('call feedkeys("\<C-Tab>", "xt")') call assert_beeps('call feedkeys("\<C-W>g\<Tab>", "xt")') + call assert_fails('tabnext #', 'E475:') " open four tab pages tabnew @@ -808,17 +809,41 @@ func Test_lastused_tabpage() call assert_equal(4, tabpagenr()) call assert_equal(2, tabpagenr('#')) + " Test for :tabnext # + tabnext # + call assert_equal(2, tabpagenr()) + call assert_equal(4, tabpagenr('#')) + " Try to jump to a closed tab page - tabclose 2 + tabclose # call assert_equal(0, tabpagenr('#')) call feedkeys("g\<Tab>", "xt") - call assert_equal(3, tabpagenr()) + call assert_equal(2, tabpagenr()) call feedkeys("\<C-Tab>", "xt") - call assert_equal(3, tabpagenr()) + call assert_equal(2, tabpagenr()) call feedkeys("\<C-W>g\<Tab>", "xt") - call assert_equal(3, tabpagenr()) + call assert_equal(2, tabpagenr()) + call assert_fails('tabnext #', 'E475:') + call assert_equal(2, tabpagenr()) + + " Test for :tabonly # + let wnum = win_getid() + $tabnew + tabonly # + call assert_equal(wnum, win_getid()) + call assert_equal(1, tabpagenr('$')) - tabclose! + " Test for :tabmove # + tabnew + let wnum = win_getid() + tabnew + tabnew + tabnext 2 + tabmove # + call assert_equal(4, tabpagenr()) + call assert_equal(wnum, win_getid()) + + tabonly! endfunc " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1413, +/**/ 1412, /**/ 1411,
--- a/src/window.c +++ b/src/window.c @@ -3844,6 +3844,7 @@ free_tabpage(tabpage_T *tp) win_new_tabpage(int after) { tabpage_T *tp = curtab; + tabpage_T *prev_tp = curtab; tabpage_T *newtp; int n; @@ -3893,7 +3894,7 @@ win_new_tabpage(int after) newtp->tp_topframe = topframe; last_status(FALSE); - lastused_tabpage = tp; + lastused_tabpage = prev_tp; #if defined(FEAT_GUI) // When 'guioptions' includes 'L' or 'R' may have to remove or add