diff --git a/README.md b/README.md index 5de7303..7f0dd7a 100644 --- a/README.md +++ b/README.md @@ -344,7 +344,7 @@ page](https://github.com/junegunn/fzf/wiki/Examples-(vim)). #### `fzf#wrap` -`fzf#wrap(name string, [opts dict, [fullscreen boolean]])` is a helper +`fzf#wrap([name string,] [opts dict,] [fullscreen boolean])` is a helper function that decorates the options dictionary so that it understands `g:fzf_layout`, `g:fzf_action`, and `g:fzf_history_dir` like `:FZF`. diff --git a/plugin/fzf.vim b/plugin/fzf.vim index b7e7dc4..b9d39cd 100644 --- a/plugin/fzf.vim +++ b/plugin/fzf.vim @@ -154,13 +154,20 @@ function! s:common_sink(action, lines) abort endtry endfunction -" name string, [opts dict, [fullscreen boolean]] -function! fzf#wrap(name, ...) - if type(a:name) != type('') - throw 'invalid name type: string expected' - endif - let opts = copy(get(a:000, 0, {})) - let bang = get(a:000, 1, 0) +" [name string,] [opts dict,] [fullscreen boolean] +function! fzf#wrap(...) + let args = ['', {}, 0] + let expects = map(copy(args), 'type(v:val)') + let tidx = 0 + for arg in copy(a:000) + let tidx = index(expects, type(arg), tidx) + if tidx < 0 + throw 'invalid arguments (expected: [name string] [opts dict] [fullscreen boolean])' + endif + let args[tidx] = arg + let tidx += 1 + endfor + let [name, opts, bang] = args " Layout: g:fzf_layout (and deprecated g:fzf_height) if bang @@ -179,12 +186,12 @@ function! fzf#wrap(name, ...) " History: g:fzf_history_dir let opts.options = get(opts, 'options', '') - if len(get(g:, 'fzf_history_dir', '')) + if len(name) && len(get(g:, 'fzf_history_dir', '')) let dir = expand(g:fzf_history_dir) if !isdirectory(dir) call mkdir(dir, 'p') endif - let opts.options = join(['--history', s:escape(dir.'/'.a:name), opts.options]) + let opts.options = join(['--history', s:escape(dir.'/'.name), opts.options]) endif " Action: g:fzf_action