To: vim_dev@googlegroups.com Subject: Patch 7.4.312 Fcc: outbox From: Bram Moolenaar 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 *** ../vim-7.4.311/runtime/doc/eval.txt 2014-05-28 16:47:11.396174926 +0200 --- runtime/doc/eval.txt 2014-05-28 18:00:06.248213223 +0200 *************** *** 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. *** ../vim-7.4.311/runtime/doc/usr_41.txt 2014-03-25 18:23:27.054087691 +0100 --- runtime/doc/usr_41.txt 2014-05-28 18:07:43.096217222 +0200 *************** *** 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 *** ../vim-7.4.311/src/eval.c 2014-05-28 16:47:11.392174926 +0200 --- src/eval.c 2014-05-28 18:11:10.264219035 +0200 *************** *** 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 *** ../vim-7.4.311/src/ex_docmd.c 2014-05-07 21:14:42.913299714 +0200 --- src/ex_docmd.c 2014-05-28 18:10:01.696218435 +0200 *************** *** 7211,7216 **** --- 7211,7217 ---- else { curwin->w_alist->al_refcount = 1; + curwin->w_alist->id = ++max_alist_id; alist_init(curwin->w_alist); } } *** ../vim-7.4.311/src/globals.h 2014-05-22 18:14:27.570224664 +0200 --- src/globals.h 2014-05-28 17:56:53.392211534 +0200 *************** *** 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 */ *** ../vim-7.4.311/src/structs.h 2014-05-13 20:19:53.573808877 +0200 --- src/structs.h 2014-05-28 17:54:18.312210177 +0200 *************** *** 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; /* *** ../vim-7.4.311/src/main.c 2014-04-01 19:55:46.252787300 +0200 --- src/main.c 2014-05-28 18:09:32.040218175 +0200 *************** *** 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. *** ../vim-7.4.311/src/version.c 2014-05-28 16:47:11.396174926 +0200 --- src/version.c 2014-05-28 17:25:32.644195071 +0200 *************** *** 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 ///