summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-06-15 22:51:57 +0100
committerBram Moolenaar <Bram@vim.org>2023-06-15 22:51:57 +0100
commit094dd152fe1d47878ec6c0b3f54b03ffde7f4a2d (patch)
tree800ef9ce98fd3165531e4c8f03c241fc95dba760 /src
parentda51ad51bf4fbd66619786d0e6a83fb3ca09930b (diff)
patch 9.0.1636: expanding a pattern interferes with cmdline completionv9.0.1636
Problem: Expanding a pattern interferes with command line completion. Solution: Set the file index only when appropriate. (closes #12519)
Diffstat (limited to 'src')
-rw-r--r--src/cmdexpand.c11
-rw-r--r--src/testdir/test_cmdline.vim30
-rw-r--r--src/version.c2
3 files changed, 37 insertions, 6 deletions
diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index 46615383c0..09691066e0 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -957,7 +957,7 @@ ExpandOne(
int mode)
{
char_u *ss = NULL;
- static int findex;
+ static int findex; // TODO: Move into expand_T
static char_u *orig_save = NULL; // kept value of orig
int orig_saved = FALSE;
int i;
@@ -971,8 +971,9 @@ ExpandOne(
if (mode == WILD_CANCEL)
ss = vim_strsave(orig_save ? orig_save : (char_u *)"");
else if (mode == WILD_APPLY)
- ss = vim_strsave(findex == -1 ? (orig_save ?
- orig_save : (char_u *)"") : xp->xp_files[findex]);
+ ss = vim_strsave(findex == -1
+ ? (orig_save ? orig_save : (char_u *)"")
+ : xp->xp_files[findex]);
// free old names
if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST)
@@ -985,7 +986,9 @@ ExpandOne(
if (compl_match_array != NULL)
cmdline_pum_remove();
}
- findex = 0;
+ // TODO: Remove condition if "findex" is part of expand_T ?
+ if (mode != WILD_EXPAND_FREE && mode != WILD_ALL && mode != WILD_ALL_KEEP)
+ findex = 0;
if (mode == WILD_FREE) // only release file name
return NULL;
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 79740b5bb0..ff38b69c6e 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -1336,6 +1336,30 @@ func Test_cmdline_complete_various()
call assert_equal('"py3file', @:)
endfunc
+" Test that expanding a pattern doesn't interfere with cmdline completion.
+func Test_expand_during_cmdline_completion()
+ func ExpandStuff()
+ badd <script>:p:h/README.*
+ call assert_equal(expand('<script>:p:h') .. '/README.txt', bufname('$'))
+ $bwipe
+ call assert_equal('README.txt', expand('README.*'))
+ call assert_equal(['README.txt'], getcompletion('README.*', 'file'))
+ endfunc
+ augroup test_CmdlineChanged
+ autocmd!
+ autocmd CmdlineChanged * call ExpandStuff()
+ augroup END
+
+ call feedkeys(":sign \<Tab>\<Tab>\<Tab>\<Tab>\<C-B>\"\<CR>", 'xt')
+ call assert_equal('"sign place', @:)
+
+ augroup test_CmdlineChanged
+ au!
+ augroup END
+ augroup! test_CmdlineChanged
+ delfunc ExpandStuff
+endfunc
+
" Test for 'wildignorecase'
func Test_cmdline_wildignorecase()
CheckUnix
@@ -1675,6 +1699,7 @@ func Test_cmd_bang_E135()
augroup test_cmd_filter_E135
au!
augroup END
+ augroup! test_cmd_filter_E135
%bwipe!
endfunc
@@ -2134,7 +2159,7 @@ endfunc
func Test_cmd_map_cmdlineChanged()
let g:log = []
cnoremap <F1> l<Cmd><CR>s
- augroup test
+ augroup test_CmdlineChanged
autocmd!
autocmd CmdlineChanged : let g:log += [getcmdline()]
augroup END
@@ -2150,9 +2175,10 @@ func Test_cmd_map_cmdlineChanged()
unlet g:log
cunmap <F1>
- augroup test
+ augroup test_CmdlineChanged
autocmd!
augroup END
+ augroup! test_CmdlineChanged
endfunc
" Test for the 'suffixes' option
diff --git a/src/version.c b/src/version.c
index 2665c51090..6a70e21b7b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1636,
+/**/
1635,
/**/
1634,