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:
72
src/eval.c
72
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},
|
||||
@@ -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
|
||||
*/
|
||||
|
Reference in New Issue
Block a user