0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

Add the settabvar() and gettabvar() functions.

Various runtime file updates.
This commit is contained in:
Bram Moolenaar
2010-05-22 15:37:44 +02:00
parent db7c686ea5
commit 06b5d5167a
32 changed files with 300 additions and 152 deletions

View File

@@ -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},
@@ -11327,6 +11331,32 @@ f_getregtype(argvars, rettv)
rettv->vval.v_string = vim_strsave(buf);
}
/*
* "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
*/
@@ -15823,6 +15853,48 @@ f_setreg(argvars, rettv)
rettv->vval.v_number = 0;
}
/*
* "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
*/