| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.312 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.4.312 |
| Problem: Cannot figure out what argument list is being used for a window. |
| Solution: Add the arglistid() function. (Marcin Szamotulski) |
| Files: runtime/doc/eval.txt, runtime/doc/usr_41.txt, src/eval.c, |
| src/ex_docmd.c, src/globals.h, src/structs.h, src/main.c |
| |
| |
| |
| |
| |
| *** 1716,1721 **** |
| --- 1716,1723 ---- |
| 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,2108 **** |
| --- 2105,2122 ---- |
| 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. |
| |
| |
| |
| *** 770,775 **** |
| --- 772,778 ---- |
| 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 |
| |
| |
| |
| *** 463,468 **** |
| --- 463,469 ---- |
| 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,7880 **** |
| --- 7876,7882 ---- |
| {"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,8864 **** |
| --- 8861,8901 ---- |
| } |
| |
| /* |
| + * "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 |
| |
| |
| |
| *** 7211,7216 **** |
| --- 7211,7217 ---- |
| else |
| { |
| curwin->w_alist->al_refcount = 1; |
| + curwin->w_alist->id = ++max_alist_id; |
| alist_init(curwin->w_alist); |
| } |
| } |
| |
| |
| |
| *** 601,606 **** |
| --- 601,607 ---- |
| * 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 */ |
| |
| |
| |
| |
| *** 675,680 **** |
| --- 675,681 ---- |
| { |
| 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; |
| |
| /* |
| |
| |
| |
| *** 322,327 **** |
| --- 322,328 ---- |
| 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. |
| |
| |
| |
| *** 736,737 **** |
| --- 736,739 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 312, |
| /**/ |
| |
| -- |
| hundred-and-one symptoms of being an internet addict: |
| 222. You send more than 20 personal e-mails a day. |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |