From f3044cb0cc2594184dbfee654264219e08634263 Mon Sep 17 00:00:00 2001 From: Sean Date: Sat, 27 Mar 2021 11:32:18 +0000 Subject: [PATCH 1/2] exposed preview path for plugin functionality --- autoload/fzf/vim.vim | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index 9e14f8540..678cc2139 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -113,6 +113,23 @@ function! s:prepend_opts(dict, eopts) return s:extend_opts(a:dict, a:eopts, 1) endfunction +function! fzf#vim#preview_path() + if s:is_win + let is_wsl_bash = exepath('bash') =~? 'Windows[/\\]system32[/\\]bash.exe$' + if empty($MSWINHOME) + let $MSWINHOME = $HOME + endif + if is_wsl_bash && $WSLENV !~# '[:]\?MSWINHOME\(\/[^:]*\)\?\(:\|$\)' + let $WSLENV = 'MSWINHOME/u:'.$WSLENV + endif + return 'bash '.(is_wsl_bash + \ ? substitute(substitute(s:bin.preview, '^\([A-Z]\):', '/mnt/\L\1', ''), '\', '/', 'g') + \ : escape(s:bin.preview, '\')) + else + return fzf#shellescape(s:bin.preview) + endif +endfunction + " [[spec to wrap], [preview window expression], [toggle-preview keys...]] function! fzf#vim#with_preview(...) " Default spec @@ -161,20 +178,7 @@ function! fzf#vim#with_preview(...) if len(window) let preview += ['--preview-window', window] endif - if s:is_win - let is_wsl_bash = exepath('bash') =~? 'Windows[/\\]system32[/\\]bash.exe$' - if empty($MSWINHOME) - let $MSWINHOME = $HOME - endif - if is_wsl_bash && $WSLENV !~# '[:]\?MSWINHOME\(\/[^:]*\)\?\(:\|$\)' - let $WSLENV = 'MSWINHOME/u:'.$WSLENV - endif - let preview_cmd = 'bash '.(is_wsl_bash - \ ? substitute(substitute(s:bin.preview, '^\([A-Z]\):', '/mnt/\L\1', ''), '\', '/', 'g') - \ : escape(s:bin.preview, '\')) - else - let preview_cmd = fzf#shellescape(s:bin.preview) - endif + let preview_cmd = fzf#vim#preview_path() if len(placeholder) let preview += ['--preview', preview_cmd.' '.placeholder] end From 8730a5b2e556590175cd771d81526bf8b8155f8e Mon Sep 17 00:00:00 2001 From: Sean Date: Sat, 27 Mar 2021 14:49:28 +0000 Subject: [PATCH 2/2] added fzf#vim#browse function --- autoload/fzf/vim.vim | 19 +++++++++++++++++++ plugin/fzf.vim | 3 ++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index 678cc2139..82956e0d5 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -1437,6 +1437,25 @@ function! fzf#vim#complete(...) return '' endfunction +" ------------------------------------------------------------------ +" fzf#vim#browse - browser +" ------------------------------------------------------------------ + +function! fzf#vim#browse(dir) + let bindings = 'ctrl-l:accept,ctrl-e:preview-down,ctrl-y:preview-up,ctrl-d:preview-page-down,ctrl-u:preview-page-up,ctrl-p:up,ctrl-n:down' + let preview = 'if [ -f {} ]; then ' . fzf#vim#preview_path() . ' {}; else ls -Ap {}; fi' + let options = '--reverse --header=$PWD --border=rounded --preview-window=right:70% --bind="' . bindings . '" --preview="' . preview . '"' + let paths = fzf#run({'source': 'echo "..\n$(ls -Ap)"', 'options': options, 'dir': a:dir, 'sink': 'silent!'}) + + if !len(paths) | return | endif + + let path = a:dir . '/' . paths[0] + + if isdirectory(path) | return fzf#vim#browse(path) | endif + + exe "e " path +endfunction + " ------------------------------------------------------------------ let &cpo = s:cpo_save unlet s:cpo_save diff --git a/plugin/fzf.vim b/plugin/fzf.vim index 9719538ac..9e2230f17 100644 --- a/plugin/fzf.vim +++ b/plugin/fzf.vim @@ -66,7 +66,8 @@ call s:defs([ \'command! -bar -bang BCommits call fzf#vim#buffer_commits(fzf#vim#with_preview({ "placeholder": "" }), 0)', \'command! -bar -bang Maps call fzf#vim#maps("n", 0)', \'command! -bar -bang Filetypes call fzf#vim#filetypes(0)', -\'command! -bang -nargs=* History call s:history(, fzf#vim#with_preview(), 0)']) +\'command! -bang -nargs=* History call s:history(, fzf#vim#with_preview(), 0)', +\'command! Browse call fzf#vim#browse(expand("%:p:h"))']) function! s:history(arg, extra, bang) let bang = a:bang || a:arg[len(a:arg)-1] == '!'