diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-06-15 22:51:57 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-06-15 22:51:57 +0100 |
commit | 094dd152fe1d47878ec6c0b3f54b03ffde7f4a2d (patch) | |
tree | 800ef9ce98fd3165531e4c8f03c241fc95dba760 /src | |
parent | da51ad51bf4fbd66619786d0e6a83fb3ca09930b (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.c | 11 | ||||
-rw-r--r-- | src/testdir/test_cmdline.vim | 30 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |