summaryrefslogtreecommitdiff
path: root/src/eval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-05-22 15:37:44 +0200
committerBram Moolenaar <Bram@vim.org>2010-05-22 15:37:44 +0200
commit06b5d5167a01c9fbf9661fb0c03bbd0a77cecae6 (patch)
tree4e4054360a178c58b1fb4e48bb51955f984a6b66 /src/eval.c
parentdb7c686ea58323f8e8550dea287eac7ea4964a55 (diff)
downloadvim-git-06b5d5167a01c9fbf9661fb0c03bbd0a77cecae6.tar.gz
Add the settabvar() and gettabvar() functions.
Various runtime file updates.
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c
index 1803e0e55..df116ad0f 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -573,6 +573,7 @@ static void f_getpos __ARGS((typval_T *argvars, typval_T *rettv));
static void f_getqflist __ARGS((typval_T *argvars, typval_T *rettv));
static void f_getreg __ARGS((typval_T *argvars, typval_T *rettv));
static void f_getregtype __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_gettabvar __ARGS((typval_T *argvars, typval_T *rettv));
static void f_gettabwinvar __ARGS((typval_T *argvars, typval_T *rettv));
static void f_getwinposx __ARGS((typval_T *argvars, typval_T *rettv));
static void f_getwinposy __ARGS((typval_T *argvars, typval_T *rettv));
@@ -677,6 +678,7 @@ static void f_setmatches __ARGS((typval_T *argvars, typval_T *rettv));
static void f_setpos __ARGS((typval_T *argvars, typval_T *rettv));
static void f_setqflist __ARGS((typval_T *argvars, typval_T *rettv));
static void f_setreg __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_settabvar __ARGS((typval_T *argvars, typval_T *rettv));
static void f_settabwinvar __ARGS((typval_T *argvars, typval_T *rettv));
static void f_setwinvar __ARGS((typval_T *argvars, typval_T *rettv));
static void f_shellescape __ARGS((typval_T *argvars, typval_T *rettv));
@@ -7663,6 +7665,7 @@ static struct fst
{"getqflist", 0, 0, f_getqflist},
{"getreg", 0, 2, f_getreg},
{"getregtype", 0, 1, f_getregtype},
+ {"gettabvar", 2, 2, f_gettabvar},
{"gettabwinvar", 3, 3, f_gettabwinvar},
{"getwinposx", 0, 0, f_getwinposx},
{"getwinposy", 0, 0, f_getwinposy},
@@ -7769,6 +7772,7 @@ static struct fst
{"setpos", 2, 2, f_setpos},
{"setqflist", 1, 2, f_setqflist},
{"setreg", 2, 3, f_setreg},
+ {"settabvar", 3, 3, f_settabvar},
{"settabwinvar", 4, 4, f_settabwinvar},
{"setwinvar", 3, 3, f_setwinvar},
{"shellescape", 1, 2, f_shellescape},
@@ -11328,6 +11332,32 @@ f_getregtype(argvars, rettv)
}
/*
+ * "gettabvar()" function
+ */
+ static void
+f_gettabvar(argvars, rettv)
+ typval_T *argvars;
+ typval_T *rettv;
+{
+ tabpage_T *tp;
+ dictitem_T *v;
+ char_u *varname;
+
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = NULL;
+
+ varname = get_tv_string_chk(&argvars[1]);
+ tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
+ if (tp != NULL && varname != NULL)
+ {
+ /* look up the variable */
+ v = find_var_in_ht(&tp->tp_vars.dv_hashtab, varname, FALSE);
+ if (v != NULL)
+ copy_tv(&v->di_tv, rettv);
+ }
+}
+
+/*
* "gettabwinvar()" function
*/
static void
@@ -15824,6 +15854,48 @@ f_setreg(argvars, rettv)
}
/*
+ * "settabvar()" function
+ */
+ static void
+f_settabvar(argvars, rettv)
+ typval_T *argvars;
+ typval_T *rettv;
+{
+ tabpage_T *save_curtab;
+ char_u *varname, *tabvarname;
+ typval_T *varp;
+ tabpage_T *tp;
+
+ rettv->vval.v_number = 0;
+
+ if (check_restricted() || check_secure())
+ return;
+
+ tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
+ varname = get_tv_string_chk(&argvars[1]);
+ varp = &argvars[2];
+
+ if (tp != NULL && varname != NULL && varp != NULL)
+ {
+ save_curtab = curtab;
+ goto_tabpage_tp(tp);
+
+ tabvarname = alloc((unsigned)STRLEN(varname) + 3);
+ if (tabvarname != NULL)
+ {
+ STRCPY(tabvarname, "t:");
+ STRCPY(tabvarname + 2, varname);
+ set_var(tabvarname, varp, TRUE);
+ vim_free(tabvarname);
+ }
+
+ /* Restore current tabpage */
+ if (valid_tabpage(save_curtab))
+ goto_tabpage_tp(save_curtab);
+ }
+}
+
+/*
* "settabwinvar()" function
*/
static void