]> granicus.if.org Git - vim/commitdiff
patch 8.1.0560: cannot use address type "other" with with user command v8.1.0560
authorBram Moolenaar <Bram@vim.org>
Sun, 2 Dec 2018 17:21:49 +0000 (18:21 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 2 Dec 2018 17:21:49 +0000 (18:21 +0100)
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.

src/ex_docmd.c
src/testdir/test_usercommands.vim
src/version.c

index d00ca5689d7eb9b380eb4a96751e6816c30d8078..9040c0d0730a6bfb8fcb06b654b91c9ce24c14fe 100644 (file)
@@ -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
index 21b1c4c0fe34ef6a5c9488ee824dccecee528fdf..2709988ac679cf6704947dbedcd08a5aa0949597 100644 (file)
@@ -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
index bbf32f5c3c8903fadc42db1f8678aeca99209cb2..355b114808782c84f75bbd39f0372e466a0640b2 100644 (file)
@@ -792,6 +792,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    560,
 /**/
     559,
 /**/