summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-01-07 20:39:53 +0100
committerBram Moolenaar <Bram@vim.org>2017-01-07 20:39:53 +0100
commit7069bf18e1b1b7bc7640335e07d1022b5acc9048 (patch)
tree0b71e10fe30c67064ccb2147381cd7f30a142c89 /src
parentcbd4de44e8d08fba3c09eb40ad6e36e83faf020a (diff)
patch 8.0.0150: completion for :filter does not skip the patternv8.0.0150
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)
Diffstat (limited to 'src')
-rw-r--r--src/ex_docmd.c11
-rw-r--r--src/testdir/test_filter_cmd.vim22
-rw-r--r--src/version.c2
3 files changed, 34 insertions, 1 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index b73eb95c9d..134a488384 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3871,7 +3871,6 @@ set_one_cmd_context(
case CMD_cfdo:
case CMD_confirm:
case CMD_debug:
- case CMD_filter:
case CMD_folddoclosed:
case CMD_folddoopen:
case CMD_hide:
@@ -3896,6 +3895,16 @@ set_one_cmd_context(
case CMD_windo:
return arg;
+ case CMD_filter:
+ if (*arg != NUL)
+ arg = skip_vimgrep_pat(arg, NULL, NULL);
+ if (arg == NULL || *arg == NUL)
+ {
+ xp->xp_context = EXPAND_NOTHING;
+ return NULL;
+ }
+ return skipwhite(arg);
+
#ifdef FEAT_CMDL_COMPL
# ifdef FEAT_SEARCH_EXTRA
case CMD_match:
diff --git a/src/testdir/test_filter_cmd.vim b/src/testdir/test_filter_cmd.vim
index 0bbd905c85..5aa5fa64df 100644
--- a/src/testdir/test_filter_cmd.vim
+++ b/src/testdir/test_filter_cmd.vim
@@ -52,3 +52,25 @@ func Test_filter_fails()
call assert_fails('filter! /pat/', 'E476:')
call assert_fails('filter! /pat/ asdf', 'E492:')
endfunc
+
+function s:complete_filter_cmd(filtcmd)
+ let keystroke = "\<TAB>\<C-R>=execute('let cmdline = getcmdline()')\<CR>\<C-C>"
+ let cmdline = ''
+ call feedkeys(':' . a:filtcmd . keystroke, 'ntx')
+ return cmdline
+endfunction
+
+func Test_filter_cmd_completion()
+ " Do not complete pattern
+ call assert_equal("filter \t", s:complete_filter_cmd('filter '))
+ call assert_equal("filter pat\t", s:complete_filter_cmd('filter pat'))
+ call assert_equal("filter /pat\t", s:complete_filter_cmd('filter /pat'))
+ call assert_equal("filter /pat/\t", s:complete_filter_cmd('filter /pat/'))
+
+ " Complete after string pattern
+ call assert_equal('filter pat print', s:complete_filter_cmd('filter pat pri'))
+
+ " Complete after regexp pattern
+ call assert_equal('filter /pat/ print', s:complete_filter_cmd('filter /pat/ pri'))
+ call assert_equal('filter #pat# print', s:complete_filter_cmd('filter #pat# pri'))
+endfunc
diff --git a/src/version.c b/src/version.c
index 7b47461cac..0c16c28977 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 150,
+/**/
149,
/**/
148,