aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2025-02-28 08:23:02 +0800
committerGitHub <noreply@github.com>2025-02-28 08:23:02 +0800
commit332d596959347f26690111afd3c3b1b750fac464 (patch)
tree9923cf63c7c926f6aabd6aed66a5ca52f5108896
parent3eee6f9d631b6c220564ef792c542964ed5e1cb9 (diff)
downloadrneovim-332d596959347f26690111afd3c3b1b750fac464.tar.gz
rneovim-332d596959347f26690111afd3c3b1b750fac464.tar.bz2
rneovim-332d596959347f26690111afd3c3b1b750fac464.zip
vim-patch:9.1.1157: command completion wrong for input() (#32669)
Problem: command completion wrong for input() (Cdrman Fu) Solution: Set commandline completion context explicitly (Jim Zhou) fixes vim/vim#16723 closes: vim/vim#16733 https://github.com/vim/vim/commit/3255af850e8bab35c30fce4177bb5ba4a941e6ce Co-authored-by: Jim Zhou <csd_189@163.com>
-rw-r--r--src/nvim/cmdexpand.c7
-rw-r--r--test/old/testdir/test_functions.vim5
2 files changed, 11 insertions, 1 deletions
diff --git a/src/nvim/cmdexpand.c b/src/nvim/cmdexpand.c
index 5421e9dd5c..33ccc834d2 100644
--- a/src/nvim/cmdexpand.c
+++ b/src/nvim/cmdexpand.c
@@ -242,7 +242,12 @@ int nextwild(expand_T *xp, int type, int options, bool escape)
char *p2;
if (xp->xp_numfiles == -1) {
- set_expand_context(xp);
+ if (ccline->input_fn && ccline->xp_context == EXPAND_COMMANDS) {
+ // Expand commands typed in input() function
+ set_cmd_context(xp, ccline->cmdbuff, ccline->cmdlen, ccline->cmdpos, false);
+ } else {
+ set_expand_context(xp);
+ }
if (xp->xp_context == EXPAND_LUA) {
nlua_expand_pat(xp);
}
diff --git a/test/old/testdir/test_functions.vim b/test/old/testdir/test_functions.vim
index 6b216947a7..7c6c32f3c4 100644
--- a/test/old/testdir/test_functions.vim
+++ b/test/old/testdir/test_functions.vim
@@ -2071,6 +2071,11 @@ func Test_input_func()
call assert_fails("call input('F:', '', 'invalid')", 'E180:')
call assert_fails("call input('F:', '', [])", 'E730:')
+
+ " Test for using 'command' as the completion function
+ call feedkeys(":let c = input('Command? ', '', 'command')\<CR>"
+ \ .. "echo bufnam\<C-A>\<CR>", 'xt')
+ call assert_equal('echo bufname(', c)
endfunc
" Test for the inputdialog() function