]> granicus.if.org Git - vim/commitdiff
patch 8.0.0150: completion for :filter does not skip the pattern v8.0.0150
authorBram Moolenaar <Bram@vim.org>
Sat, 7 Jan 2017 19:39:53 +0000 (20:39 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 7 Jan 2017 19:39:53 +0000 (20:39 +0100)
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)

src/ex_docmd.c
src/testdir/test_filter_cmd.vim
src/version.c

index b73eb95c9dd86bd2db52125ad560a69af49111b0..134a4883842c2abb0302be0431e4bbf7964a2161 100644 (file)
@@ -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:
index 0bbd905c857c6b67337632d1f512ffe933cb5ceb..5aa5fa64dfd97c69302b481d05520b822bd82068 100644 (file)
@@ -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
index 7b47461cac332e6f145a80d93465528b275a9b1f..0c16c28977d7a979575df01c38c994d50563ba33 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    150,
 /**/
     149,
 /**/