summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-12-02 18:21:49 +0100
committerBram Moolenaar <Bram@vim.org>2018-12-02 18:21:49 +0100
commit51a7454cd2c34ee459f104e45768eab3817c099e (patch)
tree6361cdd2255180a8e51f317efab9c97d5dc74c19
parentb513d3079bbe3f59a1f1a3d6931939a76cd7e54a (diff)
downloadvim-git-51a7454cd2c34ee459f104e45768eab3817c099e.tar.gz
patch 8.1.0560: cannot use address type "other" with with user commandv8.1.0560
Problem: Cannot use address type "other" with with user command. Solution: Add "other" to the list. (Daniel Hahler, closes #3655) Also reject "%" for commands with "other". Add some more tests.
-rw-r--r--src/ex_docmd.c2
-rw-r--r--src/testdir/test_usercommands.vim60
-rw-r--r--src/version.c2
3 files changed, 63 insertions, 1 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index d00ca5689..9040c0d07 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2998,6 +2998,7 @@ parse_cmd_address(exarg_T *eap, char_u **errormsg, int silent)
}
break;
case ADDR_TABS_RELATIVE:
+ case ADDR_OTHER:
*errormsg = (char_u *)_(e_invrange);
return FAIL;
case ADDR_ARGUMENTS:
@@ -5940,6 +5941,7 @@ static struct
{ADDR_BUFFERS, "buffers"},
{ADDR_WINDOWS, "windows"},
{ADDR_QUICKFIX, "quickfix"},
+ {ADDR_OTHER, "other"},
{-1, NULL}
};
#endif
diff --git a/src/testdir/test_usercommands.vim b/src/testdir/test_usercommands.vim
index 21b1c4c0f..2709988ac 100644
--- a/src/testdir/test_usercommands.vim
+++ b/src/testdir/test_usercommands.vim
@@ -154,7 +154,7 @@ func Test_CmdCompletion()
call assert_equal('"com -nargs=* + 0 1 ?', @:)
call feedkeys(":com -addr=\<C-A>\<C-B>\"\<CR>", 'tx')
- call assert_equal('"com -addr=arguments buffers lines loaded_buffers quickfix tabs windows', @:)
+ call assert_equal('"com -addr=arguments buffers lines loaded_buffers other quickfix tabs windows', @:)
call feedkeys(":com -complete=co\<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"com -complete=color command compiler', @:)
@@ -218,3 +218,61 @@ func Test_use_execute_in_completion()
call assert_equal('"DoExec hi', @:)
delcommand DoExec
endfunc
+
+func Test_addr_all()
+ command! -addr=lines DoSomething let g:a1 = <line1> | let g:a2 = <line2>
+ %DoSomething
+ call assert_equal(1, g:a1)
+ call assert_equal(line('$'), g:a2)
+
+ command! -addr=arguments DoSomething let g:a1 = <line1> | let g:a2 = <line2>
+ args one two three
+ %DoSomething
+ call assert_equal(1, g:a1)
+ call assert_equal(3, g:a2)
+
+ command! -addr=buffers DoSomething let g:a1 = <line1> | let g:a2 = <line2>
+ %DoSomething
+ for low in range(1, bufnr('$'))
+ if buflisted(low)
+ break
+ endif
+ endfor
+ call assert_equal(low, g:a1)
+ call assert_equal(bufnr('$'), g:a2)
+
+ command! -addr=loaded_buffers DoSomething let g:a1 = <line1> | let g:a2 = <line2>
+ %DoSomething
+ for low in range(1, bufnr('$'))
+ if bufloaded(low)
+ break
+ endif
+ endfor
+ call assert_equal(low, g:a1)
+ for up in range(bufnr('$'), 1, -1)
+ if bufloaded(up)
+ break
+ endif
+ endfor
+ call assert_equal(up, g:a2)
+
+ command! -addr=windows DoSomething let g:a1 = <line1> | let g:a2 = <line2>
+ new
+ %DoSomething
+ call assert_equal(1, g:a1)
+ call assert_equal(winnr('$'), g:a2)
+ bwipe
+
+ command! -addr=tabs DoSomething let g:a1 = <line1> | let g:a2 = <line2>
+ tabnew
+ %DoSomething
+ call assert_equal(1, g:a1)
+ call assert_equal(len(gettabinfo()), g:a2)
+ bwipe
+
+ command! -addr=other DoSomething echo 'nothing'
+ DoSomething
+ call assert_fails('%DoSomething')
+
+ delcommand DoSomething
+endfunc
diff --git a/src/version.c b/src/version.c
index bbf32f5c3..355b11480 100644
--- a/src/version.c
+++ b/src/version.c
@@ -793,6 +793,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 560,
+/**/
559,
/**/
558,