]> granicus.if.org Git - vim/commitdiff
patch 8.0.0721: :argedit can only have one argument v8.0.0721
authorBram Moolenaar <Bram@vim.org>
Sun, 16 Jul 2017 13:31:17 +0000 (15:31 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 16 Jul 2017 13:31:17 +0000 (15:31 +0200)
Problem:    :argedit can only have one argument.
Solution:   Allow for multiple arguments. (Christian Brabandt)

runtime/doc/editing.txt
src/ex_cmds.h
src/ex_cmds2.c
src/testdir/test_arglist.vim
src/version.c

index ecb9b87c2fa479caa27649fa2a4ffc343618c2ce..bcd86a1a5eff966b3abed87f553436e063a77dd5 100644 (file)
@@ -1,4 +1,4 @@
-*editing.txt*   For Vim version 8.0.  Last change: 2017 Jun 20
+*editing.txt*   For Vim version 8.0.  Last change: 2017 Jul 16
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -617,16 +617,16 @@ list of the current window.
                        Also see |++opt| and |+cmd|.
                        {Vi: no ++opt}
 
-:[count]arge[dit][!] [++opt] [+cmd] {name}             *:arge* *:argedit*
-                       Add {name} to the argument list and edit it.
+:[count]arge[dit][!] [++opt] [+cmd] {name} ..          *:arge* *:argedit*
+                       Add {name}s to the argument list and edit it.
                        When {name} already exists in the argument list, this
                        entry is edited.
                        This is like using |:argadd| and then |:edit|.
-                       Note that only one file name is allowed, and spaces
-                       inside the file name are allowed, like with |:edit|.
+                       Spaces in filenames have to be escaped with "\".
                        [count] is used like with |:argadd|.
-                       [!] is required if the current file cannot be
-                       |abandon|ed.
+                       If the current file cannot be |abandon|ed {name}s will
+                       still be added to the argument list, but won't be
+                       edited. No check for duplicates is done.
                        Also see |++opt| and |+cmd|.
                        {not in Vi}
 
index 0844a9cc27d8fae59e5cf281fa4b68ee76075495..dd549816ac283518e9e07898b10dd9c71f979d33 100644 (file)
@@ -137,7 +137,7 @@ EX(CMD_argdo,               "argdo",        ex_listdo,
                        BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
                        ADDR_ARGUMENTS),
 EX(CMD_argedit,                "argedit",      ex_argedit,
-                       BANG|NEEDARG|RANGE|NOTADR|ZEROR|FILE1|EDITCMD|ARGOPT|TRLBAR,
+                       BANG|NEEDARG|RANGE|NOTADR|ZEROR|FILES|EDITCMD|ARGOPT|TRLBAR,
                        ADDR_ARGUMENTS),
 EX(CMD_argglobal,      "argglobal",    ex_args,
                        BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
index 5f195923400179049610d6561e6046066bf6d340..687bbaecfb609f95675bd974cd782ae20f665cd8 100644 (file)
@@ -2801,34 +2801,20 @@ ex_next(exarg_T *eap)
     void
 ex_argedit(exarg_T *eap)
 {
-    int                fnum;
-    int                i;
-    char_u     *s;
-
-    /* Add the argument to the buffer list and get the buffer number. */
-    fnum = buflist_add(eap->arg, BLN_LISTED);
+    int i = eap->addr_count ? (int)eap->line2 : curwin->w_arg_idx + 1;
 
-    /* Check if this argument is already in the argument list. */
-    for (i = 0; i < ARGCOUNT; ++i)
-       if (ARGLIST[i].ae_fnum == fnum)
-           break;
-    if (i == ARGCOUNT)
-    {
-       /* Can't find it, add it to the argument list. */
-       s = vim_strsave(eap->arg);
-       if (s == NULL)
-           return;
-       i = alist_add_list(1, &s,
-              eap->addr_count > 0 ? (int)eap->line2 : curwin->w_arg_idx + 1);
-       if (i < 0)
-           return;
-       curwin->w_arg_idx = i;
-    }
-
-    alist_check_arg_idx();
+    if (do_arglist(eap->arg, AL_ADD, i) == FAIL)
+       return;
+#ifdef FEAT_TITLE
+    maketitle();
+#endif
 
+    if (curwin->w_arg_idx == 0 && (curbuf->b_ml.ml_flags & ML_EMPTY)
+           && curbuf->b_ffname == NULL)
+       i = 0;
     /* Edit the argument. */
-    do_argfile(eap, i);
+    if (i < ARGCOUNT)
+       do_argfile(eap, i);
 }
 
 /*
index dee2d65064a6b7cf58cfe90c71d18f88766d3bdb..1a0e4aff280909c21338742c0932657d4b8f5835 100644 (file)
@@ -188,6 +188,11 @@ func Test_zero_argadd()
   2argu
   arga third
   call assert_equal(['edited', 'a', 'third', 'b', 'c', 'd'], argv())
+
+  2argu
+  argedit file\ with\ spaces another file
+  call assert_equal(['edited', 'a', 'file with spaces', 'another', 'file', 'third', 'b', 'c', 'd'], argv())
+  call assert_equal('file with spaces', expand('%'))
 endfunc
 
 func Reset_arglist()
@@ -239,20 +244,19 @@ func Test_argedit()
   call assert_equal(['a', 'b'], argv())
   call assert_equal('b', expand('%:t'))
   argedit a
-  call assert_equal(['a', 'b'], argv())
+  call assert_equal(['a', 'b', 'a'], argv())
   call assert_equal('a', expand('%:t'))
-  if has('unix')
-    " on MS-Windows this would edit file "a b"
-    call assert_fails('argedit a b', 'E172:')
-  endif
+  argedit C D
+  call assert_equal('C', expand('%:t'))
+  call assert_equal(['a', 'b', 'a', 'C', 'D'], argv())
   argedit c
-  call assert_equal(['a', 'c', 'b'], argv())
+  call assert_equal(['a', 'b', 'a', 'C', 'c', 'D'], argv())
   0argedit x
-  call assert_equal(['x', 'a', 'c', 'b'], argv())
+  call assert_equal(['x', 'a', 'b', 'a', 'C', 'c', 'D'], argv())
   enew! | set modified
   call assert_fails('argedit y', 'E37:')
   argedit! y
-  call assert_equal(['x', 'y', 'a', 'c', 'b'], argv())
+  call assert_equal(['x', 'y', 'y', 'a', 'b', 'a', 'C', 'c', 'D'], argv())
   %argd
 endfunc
 
index 0d5db7f00b20667487400851a6ae8a10454bb701..906e3fa97e242d45185cb0220f21911fdcb48b8b 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    721,
 /**/
     720,
 /**/