]> granicus.if.org Git - vim/commitdiff
patch 8.1.1732: completion in cmdwin does not work for buffer-local commands v8.1.1732
authorBram Moolenaar <Bram@vim.org>
Mon, 22 Jul 2019 19:55:18 +0000 (21:55 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 22 Jul 2019 19:55:18 +0000 (21:55 +0200)
Problem:    Completion in cmdwin does not work for buffer-local commands.
Solution:   Use the right buffer. (closes #4711)

src/testdir/test_ins_complete.vim
src/usercmd.c
src/version.c

index d88b00377cef901a470bcb68dc412d0fa00b2a6b..c028df3e3e7a3c6ac6ed4fc58fa39a3819589994 100644 (file)
@@ -313,3 +313,21 @@ func Test_compl_feedkeys()
   bwipe!
   set completeopt&
 endfunc
+
+func Test_compl_in_cmdwin()
+  set wildmenu wildchar=<Tab>
+  com! -nargs=1 -complete=command GetInput let input = <q-args>
+  com! -buffer TestCommand echo 'TestCommand'
+
+  let input = ''
+  call feedkeys("q:iGetInput T\<C-x>\<C-v>\<CR>", 'tx!')
+  call assert_equal('TestCommand', input)
+
+  let input = ''
+  call feedkeys("q::GetInput T\<Tab>\<CR>:q\<CR>", 'tx!')
+  call assert_equal('T', input)
+
+  delcom TestCommand
+  delcom GetInput
+  set wildmenu& wildchar&
+endfunc
index 9e09a8b3c1a2ad311f3a5e89e7802912e6079adb..c04c80e23d56be814fe79b5d9e3c38fb57651a5e 100644 (file)
@@ -309,9 +309,16 @@ get_user_command_name(int idx)
     char_u *
 get_user_commands(expand_T *xp UNUSED, int idx)
 {
-    if (idx < curbuf->b_ucmds.ga_len)
-       return USER_CMD_GA(&curbuf->b_ucmds, idx)->uc_name;
-    idx -= curbuf->b_ucmds.ga_len;
+    // In cmdwin, the alternative buffer should be used.
+    buf_T *buf =
+#ifdef FEAT_CMDWIN
+       (cmdwin_type != 0 && get_cmdline_type() == NUL) ? prevwin->w_buffer :
+#endif
+       curbuf;
+
+    if (idx < buf->b_ucmds.ga_len)
+       return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name;
+    idx -= buf->b_ucmds.ga_len;
     if (idx < ucmds.ga_len)
        return USER_CMD(idx)->uc_name;
     return NULL;
@@ -395,7 +402,13 @@ uc_list(char_u *name, size_t name_len)
     long       a;
     garray_T   *gap;
 
-    gap = &curbuf->b_ucmds;
+    /* In cmdwin, the alternative buffer should be used. */
+    gap =
+#ifdef FEAT_CMDWIN
+       (cmdwin_type != 0 && get_cmdline_type() == NUL) ?
+       &prevwin->w_buffer->b_ucmds :
+#endif
+       &curbuf->b_ucmds;
     for (;;)
     {
        for (i = 0; i < gap->ga_len; ++i)
index d8b3dfedb83aa903456ca22d88ef65b499687b23..cdff0d349befcf756c2e50e666cfdb01ffa8004a 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1732,
 /**/
     1731,
 /**/