summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2023-04-20 18:07:57 +0100
committerBram Moolenaar <Bram@vim.org>2023-04-20 18:07:57 +0100
commit8281a16efc76197f7b0b2a385dffb44fce66d33e (patch)
tree1eb1e1ecce79339788e2c1539d3dabf64b000dc5
parentbe9624eb47ff4db4f068c65ad9cd37b14d1818a8 (diff)
downloadvim-git-8281a16efc76197f7b0b2a385dffb44fce66d33e.tar.gz
patch 9.0.1472: ":drop fname" may change the last used tab pagev9.0.1472
Problem: ":drop fname" may change the last used tab page. Solution: Restore the last used tab page when :drop has changed it. (closes #12087)
-rw-r--r--src/arglist.c6
-rw-r--r--src/testdir/test_tabpage.vim16
-rw-r--r--src/version.c2
3 files changed, 24 insertions, 0 deletions
diff --git a/src/arglist.c b/src/arglist.c
index bb31c45e9..a63f6c72f 100644
--- a/src/arglist.c
+++ b/src/arglist.c
@@ -1240,6 +1240,8 @@ do_arg_all(
need_mouse_correct = TRUE;
#endif
+ tabpage_T *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.
@@ -1247,6 +1249,10 @@ do_arg_all(
// 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/src/testdir/test_tabpage.vim b/src/testdir/test_tabpage.vim
index 83d6123cd..eed26f722 100644
--- a/src/testdir/test_tabpage.vim
+++ b/src/testdir/test_tabpage.vim
@@ -150,6 +150,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>
diff --git a/src/version.c b/src/version.c
index 99d1aecf6..611bd82ab 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1472,
+/**/
1471,
/**/
1470,