Dear Bram, I wrote a patch to reuse an argument list from different window. I think it is useful to have a way of setting an argument list from a different window [tab page]. One scenario where it is useful is when a window has global argument list and one makes a ':split|argl' and after a while one would like to reuse the new local argument list somewhere else. With the attached patch one can:
:call usearglist({winnr} [, {tabnr}]) to use the argument list from window number {winnr} (in tab page {tabnr}) in the current window. The function returns 0 on success and -1 on error (window or tab page not found). Thanks for reviewing the patch, Marcin Szamotulski
diff -r cf43c4c44e7a runtime/doc/eval.txt --- a/runtime/doc/eval.txt Tue Jul 29 10:15:21 2014 +0100 +++ b/runtime/doc/eval.txt Tue Jul 29 12:27:19 2014 +0100 @@ -6362,6 +6362,11 @@ < The default compare function uses the string representation of each item. For the use of {func} and {dict} see |sort()|. +usearglist({winnr} [, {tabnr}]) *usearglist()* + Use the argument list of window number {winnr} in the current + window. If {tabnr} is given use the {winnr} from the given + tabpage. + values({dict}) *values()* Return a |List| with all the values of {dict}. The |List| is in arbitrary order. diff -r cf43c4c44e7a src/eval.c --- a/src/eval.c Tue Jul 29 10:15:21 2014 +0100 +++ b/src/eval.c Tue Jul 29 12:27:19 2014 +0100 @@ -754,6 +754,7 @@ static void f_undofile __ARGS((typval_T *argvars, typval_T *rettv)); static void f_undotree __ARGS((typval_T *argvars, typval_T *rettv)); static void f_uniq __ARGS((typval_T *argvars, typval_T *rettv)); +static void f_usearglist __ARGS((typval_T *argvars, typval_T *rettv)); static void f_values __ARGS((typval_T *argvars, typval_T *rettv)); static void f_virtcol __ARGS((typval_T *argvars, typval_T *rettv)); static void f_visualmode __ARGS((typval_T *argvars, typval_T *rettv)); @@ -8187,6 +8188,7 @@ {"undofile", 1, 1, f_undofile}, {"undotree", 0, 0, f_undotree}, {"uniq", 1, 3, f_uniq}, + {"usearglist", 1, 2, f_usearglist}, {"values", 1, 1, f_values}, {"virtcol", 1, 1, f_virtcol}, {"visualmode", 0, 1, f_visualmode}, @@ -17629,6 +17631,42 @@ } /* + * "usearglist(winnr [, tabnr])" function + */ + static void +f_usearglist(argvars, rettv) + typval_T *argvars; + typval_T *rettv; +{ + win_T *wp; + tabpage_T *tp = NULL; + long n; + + if (argvars[1].v_type != VAR_UNKNOWN) { + n = get_tv_number(&argvars[1]); + if (n >= 0) + tp = find_tabpage(n); + } + else + tp = curtab; + + if (tp == NULL) { + rettv->vval.v_number = -1; + return; + } + + wp = find_win_by_nr(&argvars[0], tp); + if (wp == NULL) { + rettv->vval.v_number = -1; + return; + } + alist_unlink(ALIST(curwin)); + curwin->w_alist = wp->w_alist; + ++curwin->w_alist->al_refcount; + rettv->vval.v_number = 0; +} + +/* * "soundfold({word})" function */ static void
signature.asc
Description: Digital signature