summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShougo Matsushita <Shougo.Matsu@gmail.com>2021-10-21 11:39:53 +0100
committerBram Moolenaar <Bram@vim.org>2021-10-21 11:39:53 +0100
commitae38a9db7770b38889fbf06908cc69d42b463a73 (patch)
tree730a81a68e6095c38961c0c4912e4eb256adecd2
parentb811de5d49a23b20df82a80533d0602cda49029e (diff)
downloadvim-git-ae38a9db7770b38889fbf06908cc69d42b463a73.tar.gz
patch 8.2.3550: completion() does not work properlyv8.2.3550
Problem: completion() does not work properly. Solution: Set xp_line and add WILD_HOME_REPLACE. (Shougo Matsushita, closes #9016)
-rw-r--r--src/cmdexpand.c3
-rw-r--r--src/testdir/test_cmdline.vim15
-rw-r--r--src/version.c2
3 files changed, 19 insertions, 1 deletions
diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index c98e126a5..71c4f690c 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -978,6 +978,7 @@ set_one_cmd_context(
ExpandInit(xp);
xp->xp_pattern = buff;
+ xp->xp_line = buff;
xp->xp_context = EXPAND_COMMANDS; // Default until we get past command
ea.argt = 0;
@@ -2891,7 +2892,7 @@ f_getcompletion(typval_T *argvars, typval_T *rettv)
expand_T xpc;
int filtered = FALSE;
int options = WILD_SILENT | WILD_USE_NL | WILD_ADD_SLASH
- | WILD_NO_BEEP;
+ | WILD_NO_BEEP | WILD_HOME_REPLACE;
if (in_vim9script()
&& (check_for_string_arg(argvars, 0) == FAIL
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 9c21a205f..87ae6faa2 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -305,6 +305,11 @@ func Test_getcompletion()
let l = getcompletion('NoMatch', 'dir')
call assert_equal([], l)
+ if glob('~/*') !=# ''
+ let l = getcompletion('~/', 'dir')
+ call assert_true(l[0][0] ==# '~')
+ endif
+
let l = getcompletion('exe', 'expression')
call assert_true(index(l, 'executable(') >= 0)
let l = getcompletion('kill', 'expression')
@@ -418,6 +423,16 @@ func Test_getcompletion()
let l = getcompletion('call paint', 'cmdline')
call assert_equal([], l)
+ func T(a, c, p)
+ return "oneA\noneB\noneC"
+ endfunc
+ command -nargs=1 -complete=custom,T MyCmd
+ let l = getcompletion('MyCmd ', 'cmdline')
+ call assert_equal(['oneA', 'oneB', 'oneC'], l)
+
+ delcommand MyCmd
+ delfunc T
+
" For others test if the name is recognized.
let names = ['buffer', 'environment', 'file_in_path', 'mapping', 'tag', 'tag_listfiles', 'user']
if has('cmdline_hist')
diff --git a/src/version.c b/src/version.c
index 5df626a97..e4f72bd67 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3550,
+/**/
3549,
/**/
3548,