Skip to content

Commit

Permalink
patch 8.0.0721: :argedit can only have one argument
Browse files Browse the repository at this point in the history
Problem:    :argedit can only have one argument.
Solution:   Allow for multiple arguments. (Christian Brabandt)
  • Loading branch information
brammool committed Jul 16, 2017
1 parent 6a77d26 commit 90305c6
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 41 deletions.
14 changes: 7 additions & 7 deletions runtime/doc/editing.txt
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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}

Expand Down
2 changes: 1 addition & 1 deletion src/ex_cmds.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
36 changes: 11 additions & 25 deletions src/ex_cmds2.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

/*
Expand Down
20 changes: 12 additions & 8 deletions src/testdir/test_arglist.vim
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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

Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -769,6 +769,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
721,
/**/
720,
/**/
Expand Down

0 comments on commit 90305c6

Please sign in to comment.