patch 9.1.0102: settabvar() may change the last accessed tabpage
Problem: settabvar() may change the last accessed tabpage.
Solution: Save and restore lastused_tabpage.
(zeertzjq)
closes: #14017
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/evalvars.c b/src/evalvars.c
index 0a84afd..856e475 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -4843,6 +4843,7 @@
{
tabpage_T *save_curtab;
tabpage_T *tp;
+ tabpage_T *save_lu_tp;
char_u *varname, *tabvarname;
typval_T *varp;
@@ -4862,6 +4863,7 @@
return;
save_curtab = curtab;
+ save_lu_tp = lastused_tabpage;
goto_tabpage_tp(tp, FALSE, FALSE);
tabvarname = alloc(STRLEN(varname) + 3);
@@ -4873,9 +4875,13 @@
vim_free(tabvarname);
}
- // Restore current tabpage
+ // Restore current tabpage and last accessed tabpage.
if (valid_tabpage(save_curtab))
+ {
goto_tabpage_tp(save_curtab, FALSE, FALSE);
+ if (valid_tabpage(save_lu_tp))
+ lastused_tabpage = save_lu_tp;
+ }
}
/*
diff --git a/src/testdir/test_tabpage.vim b/src/testdir/test_tabpage.vim
index 94f6953..a531f19 100644
--- a/src/testdir/test_tabpage.vim
+++ b/src/testdir/test_tabpage.vim
@@ -993,4 +993,21 @@
bwipe!
endfunc
+" Test that settabvar() shouldn't change the last accessed tabpage.
+func Test_lastused_tabpage_settabvar()
+ tabonly!
+ tabnew
+ tabnew
+ tabnew
+ call assert_equal(3, tabpagenr('#'))
+
+ call settabvar(2, 'myvar', 'tabval')
+ call assert_equal('tabval', gettabvar(2, 'myvar'))
+ call assert_equal(3, tabpagenr('#'))
+
+ bwipe!
+ bwipe!
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index fec8252..e20b427 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 102,
+/**/
101,
/**/
100,