summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-10-25 13:22:42 +0100
committerBram Moolenaar <Bram@vim.org>2020-10-25 13:22:42 +0100
commit4ff2f2fb6bef01a06bd726bae8dfa8dd6355d594 (patch)
tree7d98d6873b30cc0b37cd676da22a4ba660fc6403
parent02194d2bd54eacd0b7b9a017a3fe1702ecb80971 (diff)
downloadvim-git-4ff2f2fb6bef01a06bd726bae8dfa8dd6355d594.tar.gz
patch 8.2.1901: variable completion does not work in command line windowv8.2.1901
Problem: Variable completion does not work in command line window. Solution: Use the "prevwin". (closes #7198)
-rw-r--r--src/evalvars.c16
-rw-r--r--src/testdir/test_ins_complete.vim25
-rw-r--r--src/version.c2
3 files changed, 41 insertions, 2 deletions
diff --git a/src/evalvars.c b/src/evalvars.c
index 1f418ae22..a5db6e952 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -1981,7 +1981,13 @@ get_user_var_name(expand_T *xp, int idx)
}
// b: variables
- ht = &curbuf->b_vars->dv_hashtab;
+ ht =
+#ifdef FEAT_CMDWIN
+ // In cmdwin, the alternative buffer should be used.
+ (cmdwin_type != 0 && get_cmdline_type() == NUL) ?
+ &prevwin->w_buffer->b_vars->dv_hashtab :
+#endif
+ &curbuf->b_vars->dv_hashtab;
if (bdone < ht->ht_used)
{
if (bdone++ == 0)
@@ -1994,7 +2000,13 @@ get_user_var_name(expand_T *xp, int idx)
}
// w: variables
- ht = &curwin->w_vars->dv_hashtab;
+ ht =
+#ifdef FEAT_CMDWIN
+ // In cmdwin, the alternative window should be used.
+ (cmdwin_type != 0 && get_cmdline_type() == NUL) ?
+ &prevwin->w_vars->dv_hashtab :
+#endif
+ &curwin->w_vars->dv_hashtab;
if (wdone < ht->ht_used)
{
if (wdone++ == 0)
diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim
index 005e14caf..8c676e22a 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -346,7 +346,10 @@ 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 w:test_winvar = 'winvar'
+ let b:test_bufvar = 'bufvar'
+ " User-defined commands
let input = ''
call feedkeys("q:iGetInput T\<C-x>\<C-v>\<CR>", 'tx!')
call assert_equal('TestCommand', input)
@@ -355,8 +358,30 @@ func Test_compl_in_cmdwin()
call feedkeys("q::GetInput T\<Tab>\<CR>:q\<CR>", 'tx!')
call assert_equal('T', input)
+
+ com! -nargs=1 -complete=var GetInput let input = <q-args>
+ " Window-local variables
+ let input = ''
+ call feedkeys("q:iGetInput w:test_\<C-x>\<C-v>\<CR>", 'tx!')
+ call assert_equal('w:test_winvar', input)
+
+ let input = ''
+ call feedkeys("q::GetInput w:test_\<Tab>\<CR>:q\<CR>", 'tx!')
+ call assert_equal('w:test_', input)
+
+ " Buffer-local variables
+ let input = ''
+ call feedkeys("q:iGetInput b:test_\<C-x>\<C-v>\<CR>", 'tx!')
+ call assert_equal('b:test_bufvar', input)
+
+ let input = ''
+ call feedkeys("q::GetInput b:test_\<Tab>\<CR>:q\<CR>", 'tx!')
+ call assert_equal('b:test_', input)
+
delcom TestCommand
delcom GetInput
+ unlet w:test_winvar
+ unlet b:test_bufvar
set wildmenu& wildchar&
endfunc
diff --git a/src/version.c b/src/version.c
index 7aa2e10e6..5a36f0651 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1901,
+/**/
1900,
/**/
1899,