aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFlorian Walch <florian@fwalch.com>2014-12-18 17:44:56 +0100
committerFlorian Walch <florian@fwalch.com>2014-12-18 21:22:40 +0100
commit815fe2845015e61bb5aaf46b458b8fbc5a4218b3 (patch)
tree15681b0352cd3bf3dc2d214393079586ce401911 /src
parentbd19cc4f8fc3d02a030caba911a1af008585f688 (diff)
downloadrneovim-815fe2845015e61bb5aaf46b458b8fbc5a4218b3.tar.gz
rneovim-815fe2845015e61bb5aaf46b458b8fbc5a4218b3.tar.bz2
rneovim-815fe2845015e61bb5aaf46b458b8fbc5a4218b3.zip
vim-patch:7.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) https://code.google.com/p/vim/source/detail?r=v7-4-434
Diffstat (limited to 'src')
-rw-r--r--src/nvim/eval.c16
-rw-r--r--src/nvim/testdir/test91.in1
-rw-r--r--src/nvim/testdir/test91.ok4
-rw-r--r--src/nvim/version.c2
4 files changed, 17 insertions, 6 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 71cb83e566..ac557eb07f 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -9603,7 +9603,8 @@ static void f_getregtype(typval_T *argvars, typval_T *rettv)
*/
static void f_gettabvar(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;
@@ -9614,16 +9615,25 @@ static void f_gettabvar(typval_T *argvars, typval_T *rettv)
varname = get_tv_string_chk(&argvars[1]);
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)
+ if (!done && argvars[2].v_type != VAR_UNKNOWN) {
copy_tv(&argvars[2], rettv);
+ }
}
/*
diff --git a/src/nvim/testdir/test91.in b/src/nvim/testdir/test91.in
index e900a522df..b66776b1e4 100644
--- a/src/nvim/testdir/test91.in
+++ b/src/nvim/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/nvim/testdir/test91.ok b/src/nvim/testdir/test91.ok
index 22e1572209..809952b69d 100644
--- a/src/nvim/testdir/test91.ok
+++ b/src/nvim/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/nvim/version.c b/src/nvim/version.c
index de4f6ffd87..0491afb614 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -295,7 +295,7 @@ static int included_patches[] = {
437,
436,
435,
- //434,
+ 434,
433,
//432 NA
//431 NA