]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1608: No command-line completion for :unsilent {command} v9.1.1608
authorDoug Kearns <dougkearns@gmail.com>
Fri, 8 Aug 2025 11:34:04 +0000 (13:34 +0200)
committerChristian Brabandt <cb@256bit.org>
Fri, 8 Aug 2025 11:34:04 +0000 (13:34 +0200)
Problem:  No command-line completion for :unsilent {command}.
Solution: Add missing command arg completion (Doug Kearns).
          (author)

Add completion tests for all command modifiers.

closes: #17524

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/cmdexpand.c
src/testdir/test_cmdmods.vim
src/version.c

index 9d66b0378c26df2ab49e9150626b8321552dc2ce..ab849e296489769d67c35fefbf4dc5f8d189f63e 100644 (file)
@@ -2361,6 +2361,7 @@ set_context_by_cmdname(
        case CMD_tab:
        case CMD_tabdo:
        case CMD_topleft:
+       case CMD_unsilent:
        case CMD_verbose:
        case CMD_vertical:
        case CMD_windo:
index a9117e15349927dcd96986f70a91c6e2c547674d..3b0deab7b595c6e3a56c8176983976d2cfdba809 100644 (file)
@@ -1,20 +1,29 @@
 " Test for all command modifiers in
 
+def s:memoize_cmdmods(): func(): list<string>
+  var cmdmods: list<string> = []
+  return () => {
+    if empty(cmdmods)
+      edit ../ex_docmd.c
+      var top = search('^static cmdmod_info_T cmdmod_info_tab[') + 1
+      var bot = search('^};.*\/\/ cmdmod_info_tab') - 1
+      var lines = getline(top, bot)
+      cmdmods = lines->map((_, v) => substitute(v, '.*"\(\k*\)".*', '\1', ''))
+      bwipe!
+    endif
+    return cmdmods
+  }
+enddef
+let s:get_cmdmods = s:memoize_cmdmods()
+
 def Test_cmdmods_array()
   # Get all the command modifiers from ex_cmds.h.
   var lines = readfile('../ex_cmds.h')->filter((_, l) => l =~ 'ex_wrongmodifier,')
   var cmds = lines->map((_, v) => substitute(v, '.*"\(\k*\)".*', '\1', ''))
-
   # :hide is both a command and a modifier
   cmds->extend(['hide'])
 
-  # Get the entries of cmdmod_info_tab[] in ex_docmd.c
-  edit ../ex_docmd.c
-  var top = search('^static cmdmod_info_T cmdmod_info_tab[') + 1
-  var bot = search('^};.*\/\/ cmdmod_info_tab') - 1
-  lines = getline(top, bot)
-  var mods = lines->map((_, v) => substitute(v, '.*"\(\k*\)".*', '\1', ''))
-
+  var mods = s:get_cmdmods()
   # Add the other commands that use ex_wrongmodifier.
   mods->extend([
                 'endclass',
@@ -73,10 +82,13 @@ def Test_keep_cmdmods_names()
 enddef
 
 def Test_cmdmod_completion()
-  assert_equal('edit', getcompletion('keepalt ed',      'cmdline')[0])
-  assert_equal('edit', getcompletion('keepjumps ed',    'cmdline')[0])
-  assert_equal('edit', getcompletion('keepmarks ed',    'cmdline')[0])
-  assert_equal('edit', getcompletion('keeppatterns ed', 'cmdline')[0])
+  for mod in s:get_cmdmods()
+    var cmd = $'{mod} ed'
+    if mod == 'filter'
+      cmd = $'{mod} /pattern/ ed'
+    endif
+    assert_equal('edit', getcompletion(cmd, 'cmdline')[0])
+  endfor
 enddef
 
 " vim: shiftwidth=2 sts=2 expandtab
index 9ba90af671be070ed3fab0ad1cd54c82d0b8b49b..c459d7c777a7575bd190aac2aa9c8dfa62fec7dc 100644 (file)
@@ -719,6 +719,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1608,
 /**/
     1607,
 /**/