mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #4756 from jbradaric/vim-7.4.1119
vim-patch:7.4.1119,7.4.1123,7.4.1132,7.4.1161
This commit is contained in:
commit
1e70ebe849
@ -88,7 +88,7 @@ return {
|
||||
},
|
||||
{
|
||||
command='argadd',
|
||||
flags=bit.bor(BANG, NEEDARG, RANGE, NOTADR, ZEROR, FILES, TRLBAR),
|
||||
flags=bit.bor(BANG, RANGE, NOTADR, ZEROR, FILES, TRLBAR),
|
||||
addr_type=ADDR_ARGUMENTS,
|
||||
func='ex_argadd',
|
||||
},
|
||||
|
@ -1616,9 +1616,15 @@ do_arglist (
|
||||
char_u *p;
|
||||
int match;
|
||||
|
||||
/*
|
||||
* Collect all file name arguments in "new_ga".
|
||||
*/
|
||||
// Set default argument for ":argadd" command.
|
||||
if (what == AL_ADD && *str == NUL) {
|
||||
if (curbuf->b_ffname == NULL) {
|
||||
return FAIL;
|
||||
}
|
||||
str = curbuf->b_fname;
|
||||
}
|
||||
|
||||
// Collect all file name arguments in "new_ga".
|
||||
get_arglist(&new_ga, str);
|
||||
|
||||
if (what == AL_DEL) {
|
||||
@ -1990,11 +1996,17 @@ void ex_argdelete(exarg_T *eap)
|
||||
} else if (curwin->w_arg_idx > eap->line1) {
|
||||
curwin->w_arg_idx = (int)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)
|
||||
} else if (*eap->arg == NUL) {
|
||||
EMSG(_(e_argreq));
|
||||
else
|
||||
} else {
|
||||
do_arglist(eap->arg, AL_DEL, 0);
|
||||
}
|
||||
maketitle();
|
||||
}
|
||||
|
||||
@ -2221,6 +2233,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)
|
||||
@ -2235,8 +2248,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;
|
||||
}
|
||||
}
|
||||
|
@ -531,7 +531,7 @@ static int included_patches[] = {
|
||||
1164,
|
||||
1163,
|
||||
// 1162 NA
|
||||
// 1161,
|
||||
1161,
|
||||
1160,
|
||||
// 1159 NA
|
||||
// 1158 NA
|
||||
@ -560,7 +560,7 @@ static int included_patches[] = {
|
||||
// 1135 NA
|
||||
// 1134 NA
|
||||
// 1133 NA
|
||||
// 1132,
|
||||
1132,
|
||||
// 1131 NA
|
||||
// 1130,
|
||||
// 1129 NA
|
||||
@ -569,11 +569,11 @@ static int included_patches[] = {
|
||||
// 1126,
|
||||
// 1125 NA
|
||||
// 1124 NA
|
||||
// 1123,
|
||||
1123,
|
||||
// 1122 NA
|
||||
// 1121,
|
||||
1120,
|
||||
// 1119,
|
||||
1119,
|
||||
1118,
|
||||
1117,
|
||||
1116,
|
||||
|
268
test/functional/legacy/arglist_spec.lua
Normal file
268
test/functional/legacy/arglist_spec.lua
Normal file
@ -0,0 +1,268 @@
|
||||
-- Test argument list commands
|
||||
|
||||
local helpers = require('test.functional.helpers')
|
||||
local clear, execute, eq = helpers.clear, helpers.execute, helpers.eq
|
||||
local eval, exc_exec, neq = helpers.eval, helpers.exc_exec, helpers.neq
|
||||
|
||||
describe('argument list commands', function()
|
||||
before_each(clear)
|
||||
|
||||
local function init_abc()
|
||||
execute('args a b c')
|
||||
execute('next')
|
||||
end
|
||||
|
||||
local function reset_arglist()
|
||||
execute('arga a | %argd')
|
||||
end
|
||||
|
||||
local function assert_fails(cmd, err)
|
||||
neq(exc_exec(cmd):find(err), nil)
|
||||
end
|
||||
|
||||
it('test that argidx() works', function()
|
||||
execute('args a b c')
|
||||
execute('last')
|
||||
eq(2, eval('argidx()'))
|
||||
execute('%argdelete')
|
||||
eq(0, eval('argidx()'))
|
||||
|
||||
execute('args a b c')
|
||||
eq(0, eval('argidx()'))
|
||||
execute('next')
|
||||
eq(1, eval('argidx()'))
|
||||
execute('next')
|
||||
eq(2, eval('argidx()'))
|
||||
execute('1argdelete')
|
||||
eq(1, eval('argidx()'))
|
||||
execute('1argdelete')
|
||||
eq(0, eval('argidx()'))
|
||||
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')
|
||||
eq({'a', 'b', 'x', 'c'}, eval('argv()'))
|
||||
eq(1, eval('argidx()'))
|
||||
|
||||
init_abc()
|
||||
execute('0argadd x')
|
||||
eq({'x', 'a', 'b', 'c'}, eval('argv()'))
|
||||
eq(2, eval('argidx()'))
|
||||
|
||||
init_abc()
|
||||
execute('1argadd x')
|
||||
eq({'a', 'x', 'b', 'c'}, eval('argv()'))
|
||||
eq(2, eval('argidx()'))
|
||||
|
||||
init_abc()
|
||||
execute('$argadd x')
|
||||
eq({'a', 'b', 'c', 'x'}, eval('argv()'))
|
||||
eq(1, eval('argidx()'))
|
||||
|
||||
init_abc()
|
||||
execute('$argadd x')
|
||||
execute('+2argadd y')
|
||||
eq({'a', 'b', 'c', 'x', 'y'}, eval('argv()'))
|
||||
eq(1, eval('argidx()'))
|
||||
|
||||
execute('%argd')
|
||||
execute('edit d')
|
||||
execute('arga')
|
||||
eq(1, eval('len(argv())'))
|
||||
eq('d', eval('get(argv(), 0, "")'))
|
||||
|
||||
execute('%argd')
|
||||
execute('new')
|
||||
execute('arga')
|
||||
eq(0, eval('len(argv())'))
|
||||
end)
|
||||
|
||||
it('test for [count]argument and [count]argdelete commands', function()
|
||||
reset_arglist()
|
||||
execute('let save_hidden = &hidden')
|
||||
execute('set hidden')
|
||||
execute('let g:buffers = []')
|
||||
execute('augroup TEST')
|
||||
execute([[au BufEnter * call add(buffers, expand('%:t'))]])
|
||||
execute('augroup END')
|
||||
|
||||
execute('argadd a b c d')
|
||||
execute('$argu')
|
||||
execute('$-argu')
|
||||
execute('-argu')
|
||||
execute('1argu')
|
||||
execute('+2argu')
|
||||
|
||||
execute('augroup TEST')
|
||||
execute('au!')
|
||||
execute('augroup END')
|
||||
|
||||
eq({'d', 'c', 'b', 'a', 'c'}, eval('g:buffers'))
|
||||
|
||||
execute('redir => result')
|
||||
execute('ar')
|
||||
execute('redir END')
|
||||
eq(1, eval([[result =~# 'a b \[c] d']]))
|
||||
|
||||
execute('.argd')
|
||||
eq({'a', 'b', 'd'}, eval('argv()'))
|
||||
|
||||
execute('-argd')
|
||||
eq({'a', 'd'}, eval('argv()'))
|
||||
|
||||
execute('$argd')
|
||||
eq({'a'}, eval('argv()'))
|
||||
|
||||
execute('1arga c')
|
||||
execute('1arga b')
|
||||
execute('$argu')
|
||||
execute('$arga x')
|
||||
eq({'a', 'b', 'c', 'x'}, eval('argv()'))
|
||||
|
||||
execute('0arga Y')
|
||||
eq({'Y', 'a', 'b', 'c', 'x'}, eval('argv()'))
|
||||
|
||||
execute('%argd')
|
||||
eq({}, eval('argv()'))
|
||||
|
||||
execute('arga a b c d e f')
|
||||
execute('2,$-argd')
|
||||
eq({'a', 'f'}, eval('argv()'))
|
||||
|
||||
execute('let &hidden = save_hidden')
|
||||
|
||||
-- Setting the argument list should fail when the current buffer has
|
||||
-- unsaved changes
|
||||
execute('%argd')
|
||||
execute('enew!')
|
||||
execute('set modified')
|
||||
assert_fails('args x y z', 'E37:')
|
||||
execute('args! x y z')
|
||||
eq({'x', 'y', 'z'}, eval('argv()'))
|
||||
eq('x', eval('expand("%:t")'))
|
||||
|
||||
execute('%argdelete')
|
||||
assert_fails('argument', 'E163:')
|
||||
end)
|
||||
|
||||
it('test for 0argadd and 0argedit', function()
|
||||
reset_arglist()
|
||||
|
||||
execute('arga a b c d')
|
||||
execute('2argu')
|
||||
execute('0arga added')
|
||||
eq({'added', 'a', 'b', 'c', 'd'}, eval('argv()'))
|
||||
|
||||
execute('%argd')
|
||||
execute('arga a b c d')
|
||||
execute('2argu')
|
||||
execute('0arge edited')
|
||||
eq({'edited', 'a', 'b', 'c', 'd'}, eval('argv()'))
|
||||
|
||||
execute('2argu')
|
||||
execute('arga third')
|
||||
eq({'edited', 'a', 'third', 'b', 'c', 'd'}, eval('argv()'))
|
||||
end)
|
||||
|
||||
it('test for argc()', function()
|
||||
reset_arglist()
|
||||
eq(0, eval('argc()'))
|
||||
execute('argadd a b')
|
||||
eq(2, eval('argc()'))
|
||||
end)
|
||||
|
||||
it('test for arglistid()', function()
|
||||
reset_arglist()
|
||||
execute('arga a b')
|
||||
eq(0, eval('arglistid()'))
|
||||
execute('split')
|
||||
execute('arglocal')
|
||||
eq(1, eval('arglistid()'))
|
||||
execute('tabnew | tabfirst')
|
||||
eq(0, eval('arglistid(2)'))
|
||||
eq(1, eval('arglistid(1, 1)'))
|
||||
eq(0, eval('arglistid(2, 1)'))
|
||||
eq(1, eval('arglistid(1, 2)'))
|
||||
execute('tabonly | only | enew!')
|
||||
execute('argglobal')
|
||||
eq(0, eval('arglistid()'))
|
||||
end)
|
||||
|
||||
it('test for argv()', function()
|
||||
reset_arglist()
|
||||
eq({}, eval('argv()'))
|
||||
eq('', eval('argv(2)'))
|
||||
execute('argadd a b c d')
|
||||
eq('c', eval('argv(2)'))
|
||||
end)
|
||||
|
||||
it('test for :argedit command', function()
|
||||
reset_arglist()
|
||||
execute('argedit a')
|
||||
eq({'a'}, eval('argv()'))
|
||||
eq('a', eval('expand("%:t")'))
|
||||
execute('argedit b')
|
||||
eq({'a', 'b'}, eval('argv()'))
|
||||
eq('b', eval('expand("%:t")'))
|
||||
execute('argedit a')
|
||||
eq({'a', 'b'}, eval('argv()'))
|
||||
eq('a', eval('expand("%:t")'))
|
||||
assert_fails('argedit a b', 'E172:')
|
||||
execute('argedit c')
|
||||
eq({'a', 'c', 'b'}, eval('argv()'))
|
||||
execute('0argedit x')
|
||||
eq({'x', 'a', 'c', 'b'}, eval('argv()'))
|
||||
execute('enew! | set modified')
|
||||
assert_fails('argedit y', 'E37:')
|
||||
execute('argedit! y')
|
||||
eq({'x', 'y', 'a', 'c', 'b'}, eval('argv()'))
|
||||
execute('%argd')
|
||||
end)
|
||||
|
||||
it('test for :argdelete command', function()
|
||||
reset_arglist()
|
||||
execute('args aa a aaa b bb')
|
||||
execute('argdelete a*')
|
||||
eq({'b', 'bb'}, eval('argv()'))
|
||||
eq('aa', eval('expand("%:t")'))
|
||||
execute('last')
|
||||
execute('argdelete %')
|
||||
eq({'b'}, eval('argv()'))
|
||||
assert_fails('argdelete', 'E471:')
|
||||
assert_fails('1,100argdelete', 'E16:')
|
||||
execute('%argd')
|
||||
end)
|
||||
|
||||
it('test for the :next, :prev, :first, :last, :rewind commands', function()
|
||||
reset_arglist()
|
||||
execute('args a b c d')
|
||||
execute('last')
|
||||
eq(3, eval('argidx()'))
|
||||
assert_fails('next', 'E165:')
|
||||
execute('prev')
|
||||
eq(2, eval('argidx()'))
|
||||
execute('Next')
|
||||
eq(1, eval('argidx()'))
|
||||
execute('first')
|
||||
eq(0, eval('argidx()'))
|
||||
assert_fails('prev', 'E164:')
|
||||
execute('3next')
|
||||
eq(3, eval('argidx()'))
|
||||
execute('rewind')
|
||||
eq(0, eval('argidx()'))
|
||||
execute('%argd')
|
||||
end)
|
||||
end)
|
@ -1,28 +0,0 @@
|
||||
-- Tests for :0argadd and :0argedit
|
||||
|
||||
local helpers = require('test.functional.helpers')
|
||||
local eq, eval, clear, execute =
|
||||
helpers.eq, helpers.eval, helpers.clear, helpers.execute
|
||||
|
||||
describe('argument_0count', function()
|
||||
setup(clear)
|
||||
|
||||
it('is working', function()
|
||||
execute('arga a b c d')
|
||||
eq({'a', 'b', 'c', 'd'}, eval('argv()'))
|
||||
execute('2argu')
|
||||
execute('0arga added')
|
||||
eq({'added', 'a', 'b', 'c', 'd'}, eval('argv()'))
|
||||
execute('2argu')
|
||||
execute('arga third')
|
||||
eq({'added', 'a', 'third', 'b', 'c', 'd'}, eval('argv()'))
|
||||
execute('%argd')
|
||||
execute('arga a b c d')
|
||||
execute('2argu')
|
||||
execute('0arge edited')
|
||||
eq({'edited', 'a', 'b', 'c', 'd'}, eval('argv()'))
|
||||
execute('2argu')
|
||||
execute('arga third')
|
||||
eq({'edited', 'a', 'third', 'b', 'c', 'd'}, eval('argv()'))
|
||||
end)
|
||||
end)
|
@ -1,47 +0,0 @@
|
||||
-- Tests for :[count]argument! and :[count]argdelete
|
||||
|
||||
local helpers = require('test.functional.helpers')
|
||||
local clear, execute, eq, eval =
|
||||
helpers.clear, helpers.execute, helpers.eq, helpers.eval
|
||||
|
||||
describe('argument_count', function()
|
||||
setup(clear)
|
||||
|
||||
it('is working', function()
|
||||
execute('%argd')
|
||||
execute('argadd a b c d')
|
||||
eq({'a', 'b', 'c', 'd'}, eval('argv()'))
|
||||
execute('set hidden')
|
||||
execute('let buffers = []')
|
||||
execute('augroup TEST')
|
||||
execute([[au BufEnter * call add(buffers, expand('%:t'))]])
|
||||
execute('augroup END')
|
||||
execute('$argu')
|
||||
execute('$-argu')
|
||||
execute('-argu')
|
||||
execute('1argu')
|
||||
execute('+2argu')
|
||||
execute('augroup TEST')
|
||||
execute('au!')
|
||||
execute('augroup END')
|
||||
eq({'d', 'c', 'b', 'a', 'c'}, eval('buffers'))
|
||||
execute('.argd')
|
||||
eq({'a', 'b', 'd'}, eval('argv()'))
|
||||
execute('-argd')
|
||||
eq({'a', 'd'}, eval('argv()'))
|
||||
execute('$argd')
|
||||
eq({'a'}, eval('argv()'))
|
||||
execute('1arga c')
|
||||
execute('1arga b')
|
||||
execute('$argu')
|
||||
execute('$arga x')
|
||||
eq({'a', 'b', 'c', 'x'}, eval('argv()'))
|
||||
execute('0arga Y')
|
||||
eq({'Y', 'a', 'b', 'c', 'x'}, eval('argv()'))
|
||||
execute('%argd')
|
||||
eq({}, eval('argv()'))
|
||||
execute('arga a b c d e f')
|
||||
execute('2,$-argd')
|
||||
eq({'a', 'f'}, eval('argv()'))
|
||||
end)
|
||||
end)
|
Loading…
Reference in New Issue
Block a user