Problem: Cannot figure out what argument list is being used for a window.
Solution: Add the arglistid() function. (Marcin Szamotulski)
append( {lnum}, {list}) Number append lines {list} below line {lnum}
argc() Number number of files in the argument list
argidx() Number current index in the argument list
+arglistid( [{winnr}, [ {tabnr}]])
+ Number argument list id
argv( {nr}) String {nr} entry of the argument list
argv( ) List the argument list
asin( {expr}) Float arc sine of {expr}
argidx() The result is the current index in the argument list. 0 is
the first file. argc() - 1 is the last one. See |arglist|.
+ *arglistid()*
+arglistid([{winnr}, [ {tabnr} ]])
+ Return the argument list ID. This is a number which
+ identifies the argument list being used. Zero is used for the
+ global argument list.
+ Return zero if the arguments are invalid.
+
+ Without arguments use the current window.
+ With {winnr} only use this window in the current tab page.
+ With {winnr} and {tabnr} use the window in the specified tab
+ page.
+
*argv()*
argv([{nr}]) The result is the {nr}th file in the argument list of the
current window. See |arglist|. "argv(0)" is the first one.
Buffers, windows and the argument list:
argc() number of entries in the argument list
argidx() current position in the argument list
+ arglistid() get id of the argument list
argv() get one entry from the argument list
bufexists() check if a buffer exists
buflisted() check if a buffer exists and is listed
static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
static void f_argidx __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_arglistid __ARGS((typval_T *argvars, typval_T *rettv));
static void f_argv __ARGS((typval_T *argvars, typval_T *rettv));
#ifdef FEAT_FLOAT
static void f_asin __ARGS((typval_T *argvars, typval_T *rettv));
{"append", 2, 2, f_append},
{"argc", 0, 0, f_argc},
{"argidx", 0, 0, f_argidx},
+ {"arglistid", 0, 2, f_arglistid},
{"argv", 0, 1, f_argv},
#ifdef FEAT_FLOAT
{"asin", 1, 1, f_asin}, /* WJMc */
rettv->vval.v_number = curwin->w_arg_idx;
}
+/*
+ * "arglistid()" function
+ */
+ static void
+f_arglistid(argvars, rettv)
+ typval_T *argvars UNUSED;
+ typval_T *rettv;
+{
+ win_T *wp;
+ tabpage_T *tp = NULL;
+ long n;
+
+ rettv->vval.v_number = -1;
+ if (argvars[0].v_type != VAR_UNKNOWN)
+ {
+ 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)
+ {
+ wp = find_win_by_nr(&argvars[0], tp);
+ if (wp != NULL)
+ rettv->vval.v_number = wp->w_alist->id;
+ }
+ }
+ else
+ rettv->vval.v_number = curwin->w_alist->id;
+}
+
/*
* "argv(nr)" function
*/
else
{
curwin->w_alist->al_refcount = 1;
+ curwin->w_alist->id = ++max_alist_id;
alist_init(curwin->w_alist);
}
}
* to this when the window is using the global argument list.
*/
EXTERN alist_T global_alist; /* global argument list */
+EXTERN int max_alist_id INIT(= 0); /* the previous argument list id */
EXTERN int arg_had_last INIT(= FALSE); /* accessed last file in
global_alist */
init_yank(); /* init yank buffers */
alist_init(&global_alist); /* Init the argument list to empty. */
+ global_alist.id = 0;
/*
* Set the default values for the options.
{
garray_T al_ga; /* growarray with the array of file names */
int al_refcount; /* number of windows using this arglist */
+ int id; /* id of this arglist */
} alist_T;
/*
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 312,
/**/
311,
/**/