diff options
author | Bram Moolenaar <Bram@vim.org> | 2010-05-22 15:37:44 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2010-05-22 15:37:44 +0200 |
commit | 06b5d5167a01c9fbf9661fb0c03bbd0a77cecae6 (patch) | |
tree | 4e4054360a178c58b1fb4e48bb51955f984a6b66 /src/eval.c | |
parent | db7c686ea58323f8e8550dea287eac7ea4964a55 (diff) | |
download | vim-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.c | 72 |
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 |