diff options
-rw-r--r-- | src/nvim/arglist.c | 7 | ||||
-rw-r--r-- | test/old/testdir/test_tabpage.vim | 16 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/nvim/arglist.c b/src/nvim/arglist.c index 6735371576..6e3fc62c5b 100644 --- a/src/nvim/arglist.c +++ b/src/nvim/arglist.c @@ -1071,6 +1071,8 @@ static void do_arg_all(int count, int forceit, int keep_tabs) aall.alist->al_refcount++; arglist_locked = true; + tabpage_T *const new_lu_tp = curtab; + // Try closing all windows that are not in the argument list. // Also close windows that are not full width; // When 'hidden' or "forceit" set the buffer becomes hidden. @@ -1078,6 +1080,11 @@ static void do_arg_all(int count, int forceit, int keep_tabs) // When the ":tab" modifier was used do this for all tab pages. arg_all_close_unused_windows(&aall); + // Now set the last used tabpage to where we started. + if (valid_tabpage(new_lu_tp)) { + lastused_tabpage = new_lu_tp; + } + // Open a window for files in the argument list that don't have one. // ARGCOUNT may change while doing this, because of autocommands. if (count > aall.opened_len || count <= 0) { diff --git a/test/old/testdir/test_tabpage.vim b/test/old/testdir/test_tabpage.vim index db23a36dd4..9d1d37b862 100644 --- a/test/old/testdir/test_tabpage.vim +++ b/test/old/testdir/test_tabpage.vim @@ -148,6 +148,22 @@ function Test_tabpage() tabonly! endfunc +func Test_tabpage_drop() + edit f1 + tab split f2 + tab split f3 + normal! gt + call assert_equal(1, tabpagenr()) + + tab drop f3 + call assert_equal(3, tabpagenr()) + call assert_equal(1, tabpagenr('#')) + bwipe! + bwipe! + bwipe! + call assert_equal(1, tabpagenr('$')) +endfunc + " Test autocommands function Test_tabpage_with_autocmd() command -nargs=1 -bar C :call add(s:li, '=== ' . <q-args> . ' ===')|<args> |