Skip to content

Commit 7069bf1

Browse files
committed
patch 8.0.0150: completion for :filter does not skip the pattern
Problem: When the pattern of :filter does not have a separator then completion of the command fails. Solution: Skip over the pattern. (Ozaki Kiichi, clodes #1299)
1 parent cbd4de4 commit 7069bf1

3 files changed

Lines changed: 34 additions & 1 deletion

File tree

src/ex_docmd.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3871,7 +3871,6 @@ set_one_cmd_context(
38713871
case CMD_cfdo:
38723872
case CMD_confirm:
38733873
case CMD_debug:
3874-
case CMD_filter:
38753874
case CMD_folddoclosed:
38763875
case CMD_folddoopen:
38773876
case CMD_hide:
@@ -3896,6 +3895,16 @@ set_one_cmd_context(
38963895
case CMD_windo:
38973896
return arg;
38983897

3898+
case CMD_filter:
3899+
if (*arg != NUL)
3900+
arg = skip_vimgrep_pat(arg, NULL, NULL);
3901+
if (arg == NULL || *arg == NUL)
3902+
{
3903+
xp->xp_context = EXPAND_NOTHING;
3904+
return NULL;
3905+
}
3906+
return skipwhite(arg);
3907+
38993908
#ifdef FEAT_CMDL_COMPL
39003909
# ifdef FEAT_SEARCH_EXTRA
39013910
case CMD_match:

src/testdir/test_filter_cmd.vim

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,25 @@ func Test_filter_fails()
5252
call assert_fails('filter! /pat/', 'E476:')
5353
call assert_fails('filter! /pat/ asdf', 'E492:')
5454
endfunc
55+
56+
function s:complete_filter_cmd(filtcmd)
57+
let keystroke = "\<TAB>\<C-R>=execute('let cmdline = getcmdline()')\<CR>\<C-C>"
58+
let cmdline = ''
59+
call feedkeys(':' . a:filtcmd . keystroke, 'ntx')
60+
return cmdline
61+
endfunction
62+
63+
func Test_filter_cmd_completion()
64+
" Do not complete pattern
65+
call assert_equal("filter \t", s:complete_filter_cmd('filter '))
66+
call assert_equal("filter pat\t", s:complete_filter_cmd('filter pat'))
67+
call assert_equal("filter /pat\t", s:complete_filter_cmd('filter /pat'))
68+
call assert_equal("filter /pat/\t", s:complete_filter_cmd('filter /pat/'))
69+
70+
" Complete after string pattern
71+
call assert_equal('filter pat print', s:complete_filter_cmd('filter pat pri'))
72+
73+
" Complete after regexp pattern
74+
call assert_equal('filter /pat/ print', s:complete_filter_cmd('filter /pat/ pri'))
75+
call assert_equal('filter #pat# print', s:complete_filter_cmd('filter #pat# pri'))
76+
endfunc

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,8 @@ static char *(features[]) =
764764

765765
static int included_patches[] =
766766
{ /* Add new patch number below this line */
767+
/**/
768+
150,
767769
/**/
768770
149,
769771
/**/

0 commit comments

Comments
 (0)