1
0
forked from aniani/vim

patch 9.0.1636: expanding a pattern interferes with cmdline completion

Problem:    Expanding a pattern interferes with command line completion.
Solution:   Set the file index only when appropriate. (closes #12519)
This commit is contained in:
zeertzjq
2023-06-15 22:51:57 +01:00
committed by Bram Moolenaar
parent da51ad51bf
commit 094dd152fe
3 changed files with 37 additions and 6 deletions

View File

@@ -957,7 +957,7 @@ ExpandOne(
int mode) int mode)
{ {
char_u *ss = NULL; 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 static char_u *orig_save = NULL; // kept value of orig
int orig_saved = FALSE; int orig_saved = FALSE;
int i; int i;
@@ -971,8 +971,9 @@ ExpandOne(
if (mode == WILD_CANCEL) if (mode == WILD_CANCEL)
ss = vim_strsave(orig_save ? orig_save : (char_u *)""); ss = vim_strsave(orig_save ? orig_save : (char_u *)"");
else if (mode == WILD_APPLY) else if (mode == WILD_APPLY)
ss = vim_strsave(findex == -1 ? (orig_save ? ss = vim_strsave(findex == -1
orig_save : (char_u *)"") : xp->xp_files[findex]); ? (orig_save ? orig_save : (char_u *)"")
: xp->xp_files[findex]);
// free old names // free old names
if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST) if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST)
@@ -985,6 +986,8 @@ ExpandOne(
if (compl_match_array != NULL) if (compl_match_array != NULL)
cmdline_pum_remove(); cmdline_pum_remove();
} }
// TODO: Remove condition if "findex" is part of expand_T ?
if (mode != WILD_EXPAND_FREE && mode != WILD_ALL && mode != WILD_ALL_KEEP)
findex = 0; findex = 0;
if (mode == WILD_FREE) // only release file name if (mode == WILD_FREE) // only release file name

View File

@@ -1336,6 +1336,30 @@ func Test_cmdline_complete_various()
call assert_equal('"py3file', @:) call assert_equal('"py3file', @:)
endfunc 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' " Test for 'wildignorecase'
func Test_cmdline_wildignorecase() func Test_cmdline_wildignorecase()
CheckUnix CheckUnix
@@ -1675,6 +1699,7 @@ func Test_cmd_bang_E135()
augroup test_cmd_filter_E135 augroup test_cmd_filter_E135
au! au!
augroup END augroup END
augroup! test_cmd_filter_E135
%bwipe! %bwipe!
endfunc endfunc
@@ -2134,7 +2159,7 @@ endfunc
func Test_cmd_map_cmdlineChanged() func Test_cmd_map_cmdlineChanged()
let g:log = [] let g:log = []
cnoremap <F1> l<Cmd><CR>s cnoremap <F1> l<Cmd><CR>s
augroup test augroup test_CmdlineChanged
autocmd! autocmd!
autocmd CmdlineChanged : let g:log += [getcmdline()] autocmd CmdlineChanged : let g:log += [getcmdline()]
augroup END augroup END
@@ -2150,9 +2175,10 @@ func Test_cmd_map_cmdlineChanged()
unlet g:log unlet g:log
cunmap <F1> cunmap <F1>
augroup test augroup test_CmdlineChanged
autocmd! autocmd!
augroup END augroup END
augroup! test_CmdlineChanged
endfunc endfunc
" Test for the 'suffixes' option " Test for the 'suffixes' option

View File

@@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1636,
/**/ /**/
1635, 1635,
/**/ /**/