diff options
author | Bram Moolenaar <Bram@vim.org> | 2014-05-28 18:22:57 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2014-05-28 18:22:57 +0200 |
commit | 2d1fe05fc06a91886635680886c200ad90f0abd7 (patch) | |
tree | 16faee30e75a2fd0156634661b452e813877e2bd | |
parent | 82c2585eb840a84240ef927c09df28d5a04302b1 (diff) | |
download | vim-2d1fe05fc06a91886635680886c200ad90f0abd7.zip |
updated for version 7.4.312
Problem: Cannot figure out what argument list is being used for a window.
Solution: Add the arglistid() function. (Marcin Szamotulski)
-rw-r--r-- | runtime/doc/eval.txt | 14 | ||||
-rw-r--r-- | runtime/doc/usr_41.txt | 1 | ||||
-rw-r--r-- | src/eval.c | 37 | ||||
-rw-r--r-- | src/ex_docmd.c | 1 | ||||
-rw-r--r-- | src/globals.h | 1 | ||||
-rw-r--r-- | src/main.c | 1 | ||||
-rw-r--r-- | src/structs.h | 1 | ||||
-rw-r--r-- | src/version.c | 2 |
8 files changed, 58 insertions, 0 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 09a081703..b51770bfa 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1716,6 +1716,8 @@ append( {lnum}, {string}) Number append {string} below line {lnum} 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} @@ -2103,6 +2105,18 @@ argc() The result is the number of files in the argument list of the 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. diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt index 670c8fdc7..ee62cac70 100644 --- a/runtime/doc/usr_41.txt +++ b/runtime/doc/usr_41.txt @@ -772,6 +772,7 @@ Date and Time: *date-functions* *time-functions* 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 diff --git a/src/eval.c b/src/eval.c index d313c5d03..0e9ec9ed0 100644 --- a/src/eval.c +++ b/src/eval.c @@ -463,6 +463,7 @@ static void f_and __ARGS((typval_T *argvars, typval_T *rettv)); 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)); @@ -7875,6 +7876,7 @@ static struct fst {"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 */ @@ -8859,6 +8861,41 @@ f_argidx(argvars, rettv) } /* + * "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 */ static void diff --git a/src/ex_docmd.c b/src/ex_docmd.c index a7df2c31a..04c9a61cf 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -7211,6 +7211,7 @@ alist_new() else { curwin->w_alist->al_refcount = 1; + curwin->w_alist->id = ++max_alist_id; alist_init(curwin->w_alist); } } diff --git a/src/globals.h b/src/globals.h index 058341b11..d831db9f8 100644 --- a/src/globals.h +++ b/src/globals.h @@ -601,6 +601,7 @@ EXTERN int mf_dont_release INIT(= FALSE); /* don't release blocks */ * 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 */ diff --git a/src/main.c b/src/main.c index c29d6be23..9c92f7a84 100644 --- a/src/main.c +++ b/src/main.c @@ -322,6 +322,7 @@ main 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. diff --git a/src/structs.h b/src/structs.h index 16a20716a..6f953002d 100644 --- a/src/structs.h +++ b/src/structs.h @@ -675,6 +675,7 @@ typedef struct arglist { 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; /* diff --git a/src/version.c b/src/version.c index 85ab6800a..b3ec0d318 100644 --- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 312, +/**/ 311, /**/ 310, |