*** runtime/doc/version7.txt (/mirror/svn-vim/tags/hack-base) (revision 249)
--- runtime/doc/version7.txt (/mirror/svn-vim/branches/tabvar-func) (revision 249)
***************
*** 50,55 ****
--- 50,56 ----
Changed |changed-7.1|
Added |added-7.1|
Fixed |fixed-7.1|
+ Hacks |hacks-7.1|
==============================================================================
INCOMPATIBLE CHANGES *incompatible-7*
***************
*** 4616,4620 ****
--- 4617,4629 ----
Files: src/memfile.c
+ Hacks *hacks-7.1*
+ -----
+
+ The following hacks are made by kana .
+
+ - |gettabvar()|
+ - |settabvar()|
+
vim:tw=78:ts=8:ft=help:norl:
*** runtime/doc/eval.txt (/mirror/svn-vim/tags/hack-base) (revision 249)
--- runtime/doc/eval.txt (/mirror/svn-vim/branches/tabvar-func) (revision 249)
***************
*** 1642,1647 ****
--- 1642,1648 ----
getqflist() List list of quickfix items
getreg( [{regname} [, 1]]) String contents of register
getregtype( [{regname}]) String type of register
+ gettabvar( {tabnr}, {varname}) any variable {varname} in tab page {tabnr}
gettabwinvar( {tabnr}, {winnr}, {name})
any {name} in {winnr} in tab page {tabnr}
getwinposx() Number X coord in pixels of GUI Vim window
***************
*** 1755,1760 ****
--- 1756,1763 ----
setpos( {expr}, {list}) none set the {expr} position to {list}
setqflist( {list}[, {action}]) Number modify quickfix list using {list}
setreg( {n}, {v}[, {opt}]) Number set register to value and type
+ settabvar( {tabnr}, {varname}, {val}) set {varname} in tab page {tabnr}
+ to {val}
settabwinvar( {tabnr}, {winnr}, {varname}, {val}) set {varname} in window
{winnr} in tab page {tabnr} to {val}
setwinvar( {nr}, {varname}, {val}) set {varname} in window {nr} to {val}
***************
*** 2021,2028 ****
char2nr(" ") returns 32
char2nr("ABC") returns 65
< The current 'encoding' is used. Example for "utf-8": >
! char2nr("?") returns 225
! char2nr("?"[0]) returns 195
< nr2char() does the opposite.
cindent({lnum}) *cindent()*
--- 2024,2031 ----
char2nr(" ") returns 32
char2nr("ABC") returns 65
< The current 'encoding' is used. Example for "utf-8": >
! char2nr("á") returns 225
! char2nr("Ã"[0]) returns 195
< nr2char() does the opposite.
cindent({lnum}) *cindent()*
***************
*** 3018,3023 ****
--- 3021,3032 ----
is one character with value 0x16.
If {regname} is not specified, |v:register| is used.
+ gettabvar({tabnr}, {varname}) *gettabvar()*
+ Get the value of variable {varname} which is local to tab page
+ {tabnr}.
+ When the variable doesn't exist an empty string is returned,
+ there is no error message.
+
gettabwinvar({tabnr}, {winnr}, {varname}) *gettabwinvar()*
Get the value of window-local variable {varname} in window
{winnr} in tab page {tabnr}.
***************
*** 4608,4613 ****
--- 4617,4630 ----
nothing: >
:call setreg('a', '', 'al')
+ settabvar({tabnr}, {varname}, {val}) *settabvar()*
+ Set local variable {varname} in tab page {tabnr} to {val}.
+ Tabs are numbered starting with one.
+ Note that the variable name without "t:" must be used.
+ Vim briefly goes to the tab page {tabnr}, but this will never
+ trigger any autocommands.
+ This function is not available in the |sandbox|.
+
settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()*
Set option or local variable {varname} in window {winnr} to
{val}.
*** src/eval.c (/mirror/svn-vim/tags/hack-base) (revision 249)
--- src/eval.c (/mirror/svn-vim/branches/tabvar-func) (revision 249)
***************
*** 536,541 ****
--- 536,542 ----
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));
***************
*** 627,632 ****
--- 628,634 ----
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));
***************
*** 7136,7141 ****
--- 7138,7144 ----
{"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},
***************
*** 7229,7234 ****
--- 7232,7238 ----
{"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, 1, f_shellescape},
***************
*** 10515,10520 ****
--- 10519,10584 ----
}
/*
+ * "gettabvar()" function
+ */
+ static void
+ f_gettabvar(argvars, rettv)
+ typval_T *argvars;
+ typval_T *rettv;
+ {
+ tabpage_T *tp;
+ char_u *varname;
+ dictitem_T *v;
+ tabpage_T *save_curtab;
+ char_u *save_p_ei;
+
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = NULL;
+
+ tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
+ varname = get_tv_string_chk(&argvars[1]);
+
+ ++emsg_off;
+
+ if (tp != NULL && varname != NULL)
+ {
+ /* set 'eventignore' for all events to avoid side effects. */
+ save_p_ei = vim_strsave(p_ei);
+ set_string_option_direct((char_u *)"ei", -1,
+ (char_u *)"all", OPT_FREE, SID_NONE);
+
+ save_curtab = curtab;
+ goto_tabpage_tp(tp);
+
+ if (*varname == NUL)
+ /* let gettabvar({tabnr}, "") return the "t:" dictionary. The
+ * scope prefix before the NUL byte is required by
+ * find_var_in_ht(). */
+ varname = (char_u *)"t:" + 2;
+ /* 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);
+
+ goto_tabpage_tp(save_curtab);
+ if (curtab == save_curtab) {
+ /* fake the flags to avoid flickering. */
+ redraw_all_later(VALID);
+ must_redraw = VALID;
+ }
+
+ /* restore 'eventignore' with the previous value. */
+ if (save_p_ei != NULL) {
+ set_string_option_direct((char_u *)"ei", -1,
+ save_p_ei, OPT_FREE, SID_NONE);
+ free_string_option(save_p_ei);
+ }
+ }
+
+ --emsg_off;
+ }
+
+ /*
* "gettabwinvar()" function
*/
static void
***************
*** 14875,14880 ****
--- 14939,15003 ----
}
/*
+ * "settabvar()" function
+ */
+ static void
+ f_settabvar(argvars, rettv)
+ typval_T *argvars;
+ typval_T *rettv;
+ {
+ tabpage_T *tp;
+ char_u *varname;
+ char_u *tabvarname;
+ typval_T *varp;
+ tabpage_T *save_curtab;
+ char_u *save_p_ei;
+
+ 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)
+ {
+ /* set 'eventignore' for all events to avoid side effects. */
+ save_p_ei = vim_strsave(p_ei);
+ set_string_option_direct((char_u *)"ei", -1,
+ (char_u *)"all", OPT_FREE, SID_NONE);
+
+ 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);
+ }
+
+ goto_tabpage_tp(save_curtab);
+ if (curtab == save_curtab) {
+ /* fake the flags to avoid flickering. */
+ redraw_all_later(VALID);
+ must_redraw = VALID;
+ }
+
+ /* restore 'eventignore' with the previous value. */
+ if (save_p_ei != NULL) {
+ set_string_option_direct((char_u *)"ei", -1,
+ save_p_ei, OPT_FREE, SID_NONE);
+ free_string_option(save_p_ei);
+ }
+ }
+ }
+
+ /*
* "settabwinvar()" function
*/
static void