summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2014-09-09 16:13:08 +0200
committerBram Moolenaar <Bram@vim.org>2014-09-09 16:13:08 +0200
commit0e2ea1beb471a24dd86a45c439a98e5d758b4270 (patch)
treeca16549dc5cc12a841dcc0492f800247759c3910
parent13e2a0af665cffa3c4485be843feca70d90a7918 (diff)
downloadvim-git-0e2ea1beb471a24dd86a45c439a98e5d758b4270.tar.gz
updated for version 7.4.434v7.4.434
Problem: gettabvar() is not consistent with getwinvar() and getbufvar(). Solution: Return a dict with all variables when the varname is empty. (Yasuhiro Matsumoto)
-rw-r--r--runtime/doc/eval.txt2
-rw-r--r--src/eval.c13
-rw-r--r--src/testdir/test91.in1
-rw-r--r--src/testdir/test91.ok4
-rw-r--r--src/version.c2
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,