]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0102: settabvar() may change the last accessed tabpage v9.1.0102
authorzeertzjq <zeertzjq@outlook.com>
Mon, 12 Feb 2024 21:50:26 +0000 (22:50 +0100)
committerChristian Brabandt <cb@256bit.org>
Mon, 12 Feb 2024 21:50:26 +0000 (22:50 +0100)
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>
src/evalvars.c
src/testdir/test_tabpage.vim
src/version.c

index 0a84afdaaf0ff7fc9f72445da65bc7178e8b4895..856e47511849c01c402c0bc30f5a4cc73c6044f7 100644 (file)
@@ -4843,6 +4843,7 @@ f_settabvar(typval_T *argvars, typval_T *rettv UNUSED)
 {
     tabpage_T  *save_curtab;
     tabpage_T  *tp;
+    tabpage_T  *save_lu_tp;
     char_u     *varname, *tabvarname;
     typval_T   *varp;
 
@@ -4862,6 +4863,7 @@ f_settabvar(typval_T *argvars, typval_T *rettv UNUSED)
        return;
 
     save_curtab = curtab;
+    save_lu_tp = lastused_tabpage;
     goto_tabpage_tp(tp, FALSE, FALSE);
 
     tabvarname = alloc(STRLEN(varname) + 3);
@@ -4873,9 +4875,13 @@ f_settabvar(typval_T *argvars, typval_T *rettv UNUSED)
        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;
+    }
 }
 
 /*
index 94f695323fee50751c6d541f3c819ca9da9754e4..a531f193342dcc4363c71574dca516ee93da9529 100644 (file)
@@ -993,4 +993,21 @@ func Test_tabpage_drop_tabmove()
   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
index fec82525d5dc5543906397322b89cf41e99c91be..e20b4270a8f4ab3b654a7c7eb10cf67773388069 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    102,
 /**/
     101,
 /**/