diff options
-rw-r--r-- | runtime/doc/eval.txt | 2 | ||||
-rw-r--r-- | src/eval.c | 13 | ||||
-rw-r--r-- | src/testdir/test91.in | 1 | ||||
-rw-r--r-- | src/testdir/test91.ok | 4 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 18 insertions, 4 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 688fc38eb..e5aa09c8a 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -3575,6 +3575,8 @@ gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()* Get the value of a tab-local variable {varname} in tab page {tabnr}. |t:var| Tabs are numbered starting with one. + When {varname} is empty a dictionary with all tab-local + variables is returned. Note that the name without "t:" must be used. When the tab or variable doesn't exist {def} or an empty string is returned, there is no error message. diff --git a/src/eval.c b/src/eval.c index 7bf52c5f3..8303bd375 100644 --- a/src/eval.c +++ b/src/eval.c @@ -12071,7 +12071,8 @@ f_gettabvar(argvars, rettv) typval_T *argvars; typval_T *rettv; { - tabpage_T *tp; + win_T *win, *oldcurwin; + tabpage_T *tp, *oldtabpage; dictitem_T *v; char_u *varname; int done = FALSE; @@ -12083,13 +12084,21 @@ f_gettabvar(argvars, rettv) tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL)); if (tp != NULL && varname != NULL) { + /* Set curwin to be our win, temporarily. Also set the tabpage, + * otherwise the window is not valid. */ + switch_win(&oldcurwin, &oldtabpage, win, tp, TRUE); + /* look up the variable */ - v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 0, varname, FALSE); + /* Let gettabvar({nr}, "") return the "t:" dictionary. */ + v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 't', varname, FALSE); if (v != NULL) { copy_tv(&v->di_tv, rettv); done = TRUE; } + + /* restore previous notion of curwin */ + restore_win(oldcurwin, oldtabpage, TRUE); } if (!done && argvars[2].v_type != VAR_UNKNOWN) diff --git a/src/testdir/test91.in b/src/testdir/test91.in index e900a522d..b66776b1e 100644 --- a/src/testdir/test91.in +++ b/src/testdir/test91.in @@ -55,6 +55,7 @@ STARTTEST :tabnew :tabnew :let t:var_list = [1, 2, 3] +:let t:other = 777 :let def_list = [4, 5, 6, 7] :tabrewind :$put =string(gettabvar(3, 'var_list')) diff --git a/src/testdir/test91.ok b/src/testdir/test91.ok index 22e157220..809952b69 100644 --- a/src/testdir/test91.ok +++ b/src/testdir/test91.ok @@ -26,8 +26,8 @@ iso-8859-2 0 [1, 2, 3] [1, 2, 3] -'' -[4, 5, 6, 7] +{'var_list': [1, 2, 3], 'other': 777} +{'var_list': [1, 2, 3], 'other': 777} [4, 5, 6, 7] '' [4, 5, 6, 7] diff --git a/src/version.c b/src/version.c index 4d9fb1ee3..1e68b49e9 100644 --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 434, +/**/ 433, /**/ 432, |