Fix incorrect --query option in completion

s:complete_trigger should prepend the default options instead of
appending them. The bug was introduced in 25ea637.

/tmp/foo<ctrl-x><ctrl-f> should give fzf prompt "/tmp/" and default
query "foo". But it used to give "/tmp//tmp/foo".
This commit is contained in:
Junegunn Choi
2017-09-26 15:20:27 +09:00
parent 36f6e6b5b0
commit b24038960e

View File

@@ -44,21 +44,34 @@ if s:is_win
let s:bin.preview = 'bash '.escape(s:bin.preview, '\') let s:bin.preview = 'bash '.escape(s:bin.preview, '\')
endif endif
function! s:merge_opts(dict, eopts) function! s:extend_opts(dict, eopts, prepend)
if empty(a:eopts) if empty(a:eopts)
return return
endif endif
if has_key(a:dict, 'options') if has_key(a:dict, 'options')
if type(a:dict.options) == s:TYPE.list && type(a:eopts) == s:TYPE.list if type(a:dict.options) == s:TYPE.list && type(a:eopts) == s:TYPE.list
call extend(a:dict.options, a:eopts) if a:prepend
let a:dict.options = extend(copy(a:eopts), a:dict.options)
else
call extend(a:dict.options, a:eopts)
endif
else else
let a:dict.options = join(map([a:dict.options, a:eopts], 'type(v:val) == s:TYPE.list ? join(map(copy(v:val), "fzf#shellescape(v:val)")) : v:val')) let all_opts = a:prepend ? [a:eopts, a:dict.options] : [a:dict.options, a:eopts]
let a:dict.options = join(map(all_opts, 'type(v:val) == s:TYPE.list ? join(map(copy(v:val), "fzf#shellescape(v:val)")) : v:val'))
endif endif
else else
let a:dict.options = a:eopts let a:dict.options = a:eopts
endif endif
endfunction endfunction
function! s:merge_opts(dict, eopts)
return s:extend_opts(a:dict, a:eopts, 0)
endfunction
function! s:prepend_opts(dict, eopts)
return s:extend_opts(a:dict, a:eopts, 1)
endfunction
" [[options to wrap], preview window expression, [toggle-preview keys...]] " [[options to wrap], preview window expression, [toggle-preview keys...]]
function! fzf#vim#with_preview(...) function! fzf#vim#with_preview(...)
" Default options " Default options
@@ -1173,7 +1186,7 @@ endfunction
function! s:complete_trigger() function! s:complete_trigger()
let opts = copy(s:opts) let opts = copy(s:opts)
call s:merge_opts(opts, ['+m', '-q', s:query]) call s:prepend_opts(opts, ['+m', '-q', s:query])
let opts['sink*'] = s:function('s:complete_insert') let opts['sink*'] = s:function('s:complete_insert')
let s:reducer = s:pluck(opts, 'reducer', s:function('s:first_line')) let s:reducer = s:pluck(opts, 'reducer', s:function('s:first_line'))
call fzf#run(opts) call fzf#run(opts)