diff options
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | plugin/fzf.vim | 5 |
2 files changed, 5 insertions, 3 deletions
@@ -294,7 +294,8 @@ of the selected items. | `dir` | string | Working directory | | `up`/`down`/`left`/`right` | number/string | Use tmux pane with the given size (e.g. `20`, `50%`) | | `window` (*Neovim only*) | string | Command to open fzf window (e.g. `vertical aboveleft 30new`) | -| `launcher` | string | External terminal emulator to start fzf with (Only used in GVim) | +| `launcher` | string | External terminal emulator to start fzf with (GVim only) | +| `launcher` | funcref | Function for generating `launcher` string (GVim only) | _However on Neovim `fzf#run` is asynchronous and does not return values so you should use `sink` or `sink*` to process the output from fzf._ diff --git a/plugin/fzf.vim b/plugin/fzf.vim index 28efe690..375d5ec9 100644 --- a/plugin/fzf.vim +++ b/plugin/fzf.vim @@ -206,8 +206,9 @@ function! s:execute(dict, command, temps) call s:pushd(a:dict) silent! !clear 2> /dev/null if has('gui_running') - let launcher = get(a:dict, 'launcher', get(g:, 'fzf_launcher', s:launcher)) - let command = printf(launcher, "'".substitute(a:command, "'", "'\"'\"'", 'g')."'") + let Launcher = get(a:dict, 'launcher', get(g:, 'Fzf_launcher', get(g:, 'fzf_launcher', s:launcher))) + let fmt = type(Launcher) == 2 ? call(Launcher, []) : Launcher + let command = printf(fmt, "'".substitute(a:command, "'", "'\"'\"'", 'g')."'") else let command = a:command endif |