changeset 11676:f87c43fca41d v8.0.0721

patch 8.0.0721: :argedit can only have one argument commit https://github.com/vim/vim/commit/90305c66a8637ea43a6509c7ab597734dd218365 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 16 15:31:17 2017 +0200 patch 8.0.0721: :argedit can only have one argument Problem: :argedit can only have one argument. Solution: Allow for multiple arguments. (Christian Brabandt)
author Christian Brabandt <cb@256bit.org>
date Sun, 16 Jul 2017 15:45:03 +0200
parents 7b139bb167d1
children fabb9a620b68
files runtime/doc/editing.txt src/ex_cmds.h src/ex_cmds2.c src/testdir/test_arglist.vim src/version.c
diffstat 5 files changed, 35 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -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}
 
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -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,
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -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);
-
-    /* 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();
-
+    int i = eap->addr_count ? (int)eap->line2 : curwin->w_arg_idx + 1;
+
+    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);
 }
 
 /*
--- a/src/testdir/test_arglist.vim
+++ b/src/testdir/test_arglist.vim
@@ -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
 
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    721,
+/**/
     720,
 /**/
     719,