On 18:23 Wed 28 May     , Bram Moolenaar wrote:
> 
> 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 -- [email protected] -- 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    ///
> 
> -- 
> -- 
> You received this message from the "vim_dev" maillist.
> Do not top-post! Type your reply below the text you are replying to.
> For more information, visit http://www.vim.org/maillist.php
> 
> --- 
> You received this message because you are subscribed to the Google Groups 
> "vim_dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.

Dear Bram,

Thank you for including the patch!

Best regards,
Marcin

Attachment: signature.asc
Description: Digital signature

Raspunde prin e-mail lui