From a74731d7f5abe874fb14766249a039408f2137b5 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Fri, 4 Jun 2021 22:04:20 +0900 Subject: [vim] Add 'sinklist' as a synonym to 'sink*' So that it's easier to add a sinklist function to a spec dictionary. let spec = { 'source': source, 'options': ['--preview', preview] } function spec.sinklist(matches) echom string(a:matches) endfunction call fzf#run(fzf#wrap(spec)) --- README-VIM.md | 4 ++-- doc/fzf.txt | 2 +- plugin/fzf.vim | 8 +++++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README-VIM.md b/README-VIM.md index 3704f14c..425bf672 100644 --- a/README-VIM.md +++ b/README-VIM.md @@ -283,7 +283,7 @@ The following table summarizes the available options. | `source` | list | Vim list as input to fzf | | `sink` | string | Vim command to handle the selected item (e.g. `e`, `tabe`) | | `sink` | funcref | Reference to function to process each selected item | -| `sink*` | funcref | Similar to `sink`, but takes the list of output lines at once | +| `sinklist` (or `sink*`) | funcref | Similar to `sink`, but takes the list of output lines at once | | `options` | string/list | Options to fzf | | `dir` | string | Working directory | | `up`/`down`/`left`/`right` | number/string | (Layout) Window position and size (e.g. `20`, `50%`) | @@ -387,7 +387,7 @@ command! -bang -complete=dir -nargs=? LS - `g:fzf_layout` - `g:fzf_action` - - **Works only when no custom `sink` (or `sink*`) is provided** + - **Works only when no custom `sink` (or `sinklist`) is provided** - Having custom sink usually means that each entry is not an ordinary file path (e.g. name of color scheme), so we can't blindly apply the same strategy (i.e. `tabedit some-color-scheme` doesn't make sense) diff --git a/doc/fzf.txt b/doc/fzf.txt index e5197dd6..94857232 100644 --- a/doc/fzf.txt +++ b/doc/fzf.txt @@ -300,7 +300,7 @@ The following table summarizes the available options. `source` | list | Vim list as input to fzf `sink` | string | Vim command to handle the selected item (e.g. `e` , `tabe` ) `sink` | funcref | Reference to function to process each selected item - `sink*` | funcref | Similar to `sink` , but takes the list of output lines at once + `sinklist` (or `sink*` ) | funcref | Similar to `sink` , but takes the list of output lines at once `options` | string/list | Options to fzf `dir` | string | Working directory `up` / `down` / `left` / `right` | number/string | (Layout) Window position and size (e.g. `20` , `50%` ) diff --git a/plugin/fzf.vim b/plugin/fzf.vim index 04f96435..d8295df2 100644 --- a/plugin/fzf.vim +++ b/plugin/fzf.vim @@ -419,13 +419,13 @@ function! fzf#wrap(...) endif " Action: g:fzf_action - if !s:has_any(opts, ['sink', 'sink*']) + if !s:has_any(opts, ['sink', 'sinklist', 'sink*']) let opts._action = get(g:, 'fzf_action', s:default_action) let opts.options .= ' --expect='.join(keys(opts._action), ',') - function! opts.sink(lines) abort + function! opts.sinklist(lines) abort return s:common_sink(self._action, a:lines) endfunction - let opts['sink*'] = remove(opts, 'sink') + let opts['sink*'] = opts.sinklist " For backward compatibility endif return opts @@ -943,6 +943,8 @@ function! s:callback(dict, lines) abort endif if has_key(a:dict, 'sink*') call a:dict['sink*'](a:lines) + elseif has_key(a:dict, 'sinklist') + call a:dict['sinklist'](a:lines) endif catch if stridx(v:exception, ':E325:') < 0 -- cgit v1.2.3