Patch 8.1.0341
Problem:    :argadd in empty buffer changes the buffer name. (Pavol Juhas)
Solution:   Don't re-use the current buffer when not going to edit the file.
            (closes #3397)  Do re-use the current buffer for :next.
Files:      src/ex_cmds2.c, src/testdir/test_arglist.vim,
            src/testdir/test_command_count.vim


*** ../vim-8.1.0340/src/ex_cmds2.c      2018-08-30 13:07:12.026033864 +0200
--- src/ex_cmds2.c      2018-08-31 23:00:26.400150737 +0200
***************
*** 2445,2454 ****
   */
  
  static char_u *do_one_arg(char_u *str);
! static int    do_arglist(char_u *str, int what, int after);
  static void   alist_check_arg_idx(void);
  static int    editing_arg_idx(win_T *win);
! static int    alist_add_list(int count, char_u **files, int after);
  #define AL_SET        1
  #define AL_ADD        2
  #define AL_DEL        3
--- 2445,2454 ----
   */
  
  static char_u *do_one_arg(char_u *str);
! static int    do_arglist(char_u *str, int what, int after, int will_edit);
  static void   alist_check_arg_idx(void);
  static int    editing_arg_idx(win_T *win);
! static void   alist_add_list(int count, char_u **files, int after, int 
will_edit);
  #define AL_SET        1
  #define AL_ADD        2
  #define AL_DEL        3
***************
*** 2553,2559 ****
      void
  set_arglist(char_u *str)
  {
!     do_arglist(str, AL_SET, 0);
  }
  
  /*
--- 2553,2559 ----
      void
  set_arglist(char_u *str)
  {
!     do_arglist(str, AL_SET, 0, FALSE);
  }
  
  /*
***************
*** 2567,2573 ****
  do_arglist(
      char_u    *str,
      int               what,
!     int               after UNUSED)           /* 0 means before first one */
  {
      garray_T  new_ga;
      int               exp_count;
--- 2567,2574 ----
  do_arglist(
      char_u    *str,
      int               what,
!     int               after UNUSED,   // 0 means before first one
!     int               will_edit)      // will edit added argument
  {
      garray_T  new_ga;
      int               exp_count;
***************
*** 2652,2662 ****
  
        if (what == AL_ADD)
        {
!           (void)alist_add_list(exp_count, exp_files, after);
            vim_free(exp_files);
        }
        else /* what == AL_SET */
!           alist_set(ALIST(curwin), exp_count, exp_files, FALSE, NULL, 0);
      }
  
      alist_check_arg_idx();
--- 2653,2663 ----
  
        if (what == AL_ADD)
        {
!           alist_add_list(exp_count, exp_files, after, will_edit);
            vim_free(exp_files);
        }
        else /* what == AL_SET */
!           alist_set(ALIST(curwin), exp_count, exp_files, will_edit, NULL, 0);
      }
  
      alist_check_arg_idx();
***************
*** 2932,2938 ****
      {
        if (*eap->arg != NUL)               /* redefine file list */
        {
!           if (do_arglist(eap->arg, AL_SET, 0) == FAIL)
                return;
            i = 0;
        }
--- 2933,2939 ----
      {
        if (*eap->arg != NUL)               /* redefine file list */
        {
!           if (do_arglist(eap->arg, AL_SET, 0, TRUE) == FAIL)
                return;
            i = 0;
        }
***************
*** 2952,2958 ****
      // Whether curbuf will be reused, curbuf->b_ffname will be set.
      int curbuf_is_reusable = curbuf_reusable();
  
!     if (do_arglist(eap->arg, AL_ADD, i) == FAIL)
        return;
  #ifdef FEAT_TITLE
      maketitle();
--- 2953,2959 ----
      // Whether curbuf will be reused, curbuf->b_ffname will be set.
      int curbuf_is_reusable = curbuf_reusable();
  
!     if (do_arglist(eap->arg, AL_ADD, i, TRUE) == FAIL)
        return;
  #ifdef FEAT_TITLE
      maketitle();
***************
*** 2974,2980 ****
  ex_argadd(exarg_T *eap)
  {
      do_arglist(eap->arg, AL_ADD,
!              eap->addr_count > 0 ? (int)eap->line2 : curwin->w_arg_idx + 1);
  #ifdef FEAT_TITLE
      maketitle();
  #endif
--- 2975,2982 ----
  ex_argadd(exarg_T *eap)
  {
      do_arglist(eap->arg, AL_ADD,
!              eap->addr_count > 0 ? (int)eap->line2 : curwin->w_arg_idx + 1,
!              FALSE);
  #ifdef FEAT_TITLE
      maketitle();
  #endif
***************
*** 3024,3030 ****
      else if (*eap->arg == NUL)
        EMSG(_(e_argreq));
      else
!       do_arglist(eap->arg, AL_DEL, 0);
  #ifdef FEAT_TITLE
      maketitle();
  #endif
--- 3026,3032 ----
      else if (*eap->arg == NUL)
        EMSG(_(e_argreq));
      else
!       do_arglist(eap->arg, AL_DEL, 0, FALSE);
  #ifdef FEAT_TITLE
      maketitle();
  #endif
***************
*** 3269,3281 ****
   * Add files[count] to the arglist of the current window after arg "after".
   * The file names in files[count] must have been allocated and are taken over.
   * Files[] itself is not taken over.
-  * Returns index of first added argument.  Returns -1 when failed (out of 
mem).
   */
!     static int
  alist_add_list(
      int               count,
      char_u    **files,
!     int               after)      /* where to add: 0 = before first one */
  {
      int               i;
      int               old_argcount = ARGCOUNT;
--- 3271,3283 ----
   * Add files[count] to the arglist of the current window after arg "after".
   * The file names in files[count] must have been allocated and are taken over.
   * Files[] itself is not taken over.
   */
!     static void
  alist_add_list(
      int               count,
      char_u    **files,
!     int               after,      // where to add: 0 = before first one
!     int               will_edit)  // will edit adding argument
  {
      int               i;
      int               old_argcount = ARGCOUNT;
***************
*** 3291,3309 ****
                                       (ARGCOUNT - after) * sizeof(aentry_T));
        for (i = 0; i < count; ++i)
        {
            ARGLIST[after + i].ae_fname = files[i];
!           ARGLIST[after + i].ae_fnum =
!                               buflist_add(files[i], BLN_LISTED | BLN_CURBUF);
        }
        ALIST(curwin)->al_ga.ga_len += count;
        if (old_argcount > 0 && curwin->w_arg_idx >= after)
            curwin->w_arg_idx += count;
!       return after;
      }
  
      for (i = 0; i < count; ++i)
        vim_free(files[i]);
-     return -1;
  }
  
  #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
--- 3293,3311 ----
                                       (ARGCOUNT - after) * sizeof(aentry_T));
        for (i = 0; i < count; ++i)
        {
+           int flags = BLN_LISTED | (will_edit ? BLN_CURBUF : 0);
+ 
            ARGLIST[after + i].ae_fname = files[i];
!           ARGLIST[after + i].ae_fnum = buflist_add(files[i], flags);
        }
        ALIST(curwin)->al_ga.ga_len += count;
        if (old_argcount > 0 && curwin->w_arg_idx >= after)
            curwin->w_arg_idx += count;
!       return;
      }
  
      for (i = 0; i < count; ++i)
        vim_free(files[i]);
  }
  
  #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
*** ../vim-8.1.0340/src/testdir/test_arglist.vim        2018-04-24 
21:54:38.000000000 +0200
--- src/testdir/test_arglist.vim        2018-08-31 22:42:29.649222626 +0200
***************
*** 80,85 ****
--- 80,103 ----
    call assert_equal(0, len(argv()))
  endfunc
  
+ func Test_argadd_empty_curbuf()
+   new
+   let curbuf = bufnr('%')
+   call writefile(['test', 'Xargadd'], 'Xargadd')
+   " must not re-use the current buffer.
+   argadd Xargadd
+   call assert_equal(curbuf, bufnr('%'))
+   call assert_equal('', bufname('%'))
+   call assert_equal(1, line('$'))
+   rew
+   call assert_notequal(curbuf, bufnr('%'))
+   call assert_equal('Xargadd', bufname('%'))
+   call assert_equal(2, line('$'))
+ 
+   %argd
+   bwipe!
+ endfunc
+ 
  func Init_abc()
    args a b c
    next
*** ../vim-8.1.0340/src/testdir/test_command_count.vim  2018-04-24 
21:47:12.000000000 +0200
--- src/testdir/test_command_count.vim  2018-08-31 23:01:54.967036898 +0200
***************
*** 158,164 ****
  func Test_command_count_4()
    %argd
    let bufnr = bufnr('$')
!   arga aa bb cc dd ee ff
    3argu
    let args = []
    .,$-argdo call add(args, expand('%'))
--- 158,166 ----
  func Test_command_count_4()
    %argd
    let bufnr = bufnr('$')
!   next aa bb cc dd ee ff
!   call assert_equal(bufnr, bufnr('%'))
! 
    3argu
    let args = []
    .,$-argdo call add(args, expand('%'))
*** ../vim-8.1.0340/src/version.c       2018-08-31 22:26:49.210912007 +0200
--- src/version.c       2018-08-31 22:44:55.551715626 +0200
***************
*** 796,797 ****
--- 796,799 ----
  {   /* Add new patch number below this line */
+ /**/
+     341,
  /**/

-- 
login: yes
password: I don't know, please tell me
password is incorrect
login: yes
password: incorrect

 /// 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.

Raspunde prin e-mail lui