diff options
author | Jurica Bradaric <jbradaric@gmail.com> | 2016-05-14 12:40:05 +0200 |
---|---|---|
committer | Jurica Bradaric <jbradaric@gmail.com> | 2016-05-14 15:51:30 +0200 |
commit | dfdf7c02be1758f4adfe487a36f372f514dda39a (patch) | |
tree | b71d36e03a29d435be63bc29a852937828f86299 | |
parent | 1573aa0b0a0a17da93e4fb2220fd5d6ecbd6d267 (diff) | |
download | rneovim-dfdf7c02be1758f4adfe487a36f372f514dda39a.tar.gz rneovim-dfdf7c02be1758f4adfe487a36f372f514dda39a.tar.bz2 rneovim-dfdf7c02be1758f4adfe487a36f372f514dda39a.zip |
vim-patch:7.4.1123
Problem: Using ":argadd" when there are no arguments results in the second
argument to be the current one. (Yegappan Lakshmanan)
Solution: Correct the w_arg_idx value.
https://github.com/vim/vim/commit/a24f0a550fed3d9773800cf6be4efd072fff20ec
-rw-r--r-- | src/nvim/ex_cmds2.c | 6 | ||||
-rw-r--r-- | src/nvim/version.c | 2 | ||||
-rw-r--r-- | test/functional/legacy/arglist_spec.lua | 52 |
3 files changed, 56 insertions, 4 deletions
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c index 18e09a7619..b6d0ef78cf 100644 --- a/src/nvim/ex_cmds2.c +++ b/src/nvim/ex_cmds2.c @@ -2098,6 +2098,7 @@ alist_add_list ( int after /* where to add: 0 = before first one */ ) { + int old_argcount = ARGCOUNT; ga_grow(&ALIST(curwin)->al_ga, count); { if (after < 0) @@ -2112,8 +2113,9 @@ alist_add_list ( ARGLIST[after + i].ae_fnum = buflist_add(files[i], BLN_LISTED); } ALIST(curwin)->al_ga.ga_len += count; - if (curwin->w_arg_idx >= after) - ++curwin->w_arg_idx; + if (old_argcount > 0 && curwin->w_arg_idx >= after) { + curwin->w_arg_idx += count; + } return after; } } diff --git a/src/nvim/version.c b/src/nvim/version.c index 937d481e19..164f151741 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -559,7 +559,7 @@ static int included_patches[] = { // 1126, // 1125 NA // 1124 NA - // 1123, + 1123, // 1122 NA // 1121, 1120, diff --git a/test/functional/legacy/arglist_spec.lua b/test/functional/legacy/arglist_spec.lua index a569479b62..e85d8a7aca 100644 --- a/test/functional/legacy/arglist_spec.lua +++ b/test/functional/legacy/arglist_spec.lua @@ -8,7 +8,19 @@ local eq, eval = helpers.eq, helpers.eval describe('argument list commands', function() before_each(clear) - it('is working', function() + function assert_argc(l) + eq(#l, eval('argc()')) + for i = 1, #l do + eq(l[i], eval('argv(' .. (i - 1) .. ')')) + end + end + + function init_abc() + execute('args a b c') + execute('next') + end + + it('test that argidx() works', function() execute('args a b c') execute('last') eq(2, eval('argidx()')) @@ -28,4 +40,42 @@ describe('argument list commands', function() execute('1argdelete') eq(0, eval('argidx()')) end) + + it('test that argadd() works', function() + execute('%argdelete') + execute('argadd a b c') + eq(0, eval('argidx()')) + + execute('%argdelete') + execute('argadd a') + eq(0, eval('argidx()')) + execute('argadd b c d') + eq(0, eval('argidx()')) + + init_abc() + execute('argadd x') + assert_argc({'a', 'b', 'x', 'c'}) + eq(1, eval('argidx()')) + + init_abc() + execute('0argadd x') + assert_argc({'x', 'a', 'b', 'c'}) + eq(2, eval('argidx()')) + + init_abc() + execute('1argadd x') + assert_argc({'a', 'x', 'b', 'c'}) + eq(2, eval('argidx()')) + + init_abc() + execute('$argadd x') + assert_argc({'a', 'b', 'c', 'x'}) + eq(1, eval('argidx()')) + + init_abc() + execute('$argadd x') + execute('+2argadd y') + assert_argc({'a', 'b', 'c', 'x', 'y'}) + eq(1, eval('argidx()')) + end) end) |