aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/arglist.c7
-rw-r--r--test/old/testdir/test_tabpage.vim16
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>