changeset 7639:0ecb62a66a7a v7.4.1119

commit https://github.com/vim/vim/commit/72defda84eb26be9e2ade56c7877b912f818026e Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 17 18:04:33 2016 +0100 patch 7.4.1119 Problem: argidx() has a wrong value after ":%argdelete". (Yegappan Lakshmanan) Solution: Correct the value of w_arg_idx. Add a test.
author Christian Brabandt <cb@256bit.org>
date Sun, 17 Jan 2016 18:15:04 +0100
parents 67ff092db9d6
children 6da21217eb5a
files src/ex_cmds2.c src/testdir/Make_all.mak src/testdir/test_arglist.vim src/version.c
diffstat 4 files changed, 30 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -2562,6 +2562,10 @@ ex_argdelete(eap)
 		curwin->w_arg_idx -= n;
 	    else if (curwin->w_arg_idx > eap->line1)
 		curwin->w_arg_idx = eap->line1;
+	    if (ARGCOUNT == 0)
+		curwin->w_arg_idx = 0;
+	    else if (curwin->w_arg_idx >= ARGCOUNT)
+		curwin->w_arg_idx = ARGCOUNT - 1;
 	}
     }
     else if (*eap->arg == NUL)
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -171,7 +171,8 @@ SCRIPTS_GUI = test16.out
 
 # Tests using runtest.vim.vim.
 # Keep test_alot.res as the last one, sort the others.
-NEW_TESTS = test_assert.res \
+NEW_TESTS = test_arglist.res \
+	    test_assert.res \
 	    test_cdo.res \
 	    test_hardcopy.res \
 	    test_increment.res \
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_arglist.vim
@@ -0,0 +1,22 @@
+" Test argument list commands
+
+func Test_argidx()
+  args a b c
+  last
+  call assert_equal(2, argidx())
+  %argdelete
+  call assert_equal(0, argidx())
+
+  args a b c
+  call assert_equal(0, argidx())
+  next
+  call assert_equal(1, argidx())
+  next
+  call assert_equal(2, argidx())
+  1argdelete
+  call assert_equal(1, argidx())
+  1argdelete
+  call assert_equal(0, argidx())
+  1argdelete
+  call assert_equal(0, argidx())
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1119,
+/**/
     1118,
 /**/
     1117,