[fzf#vim#with_preview] Support WSL bash (#1026)

* [fzf#vim#with_preview] support wsl bash

Close https://github.com/junegunn/fzf.vim/issues/988
Close https://github.com/junegunn/fzf.vim/pull/1009

* [fzf#vim#with_preview] use abs path for bin/

WSL has issues with relative filepaths.
This commit is contained in:
Jan Edmund Lazo
2020-05-23 08:23:26 -04:00
committed by GitHub
parent 996ec3b4b0
commit 7a655179a4

View File

@@ -30,7 +30,7 @@ set cpo&vim
let s:is_win = has('win32') || has('win64') let s:is_win = has('win32') || has('win64')
let s:layout_keys = ['window', 'up', 'down', 'left', 'right'] let s:layout_keys = ['window', 'up', 'down', 'left', 'right']
let s:bin_dir = expand('<sfile>:h:h:h').'/bin/' let s:bin_dir = expand('<sfile>:p:h:h:h').'/bin/'
let s:bin = { let s:bin = {
\ 'preview': s:bin_dir.'preview.sh', \ 'preview': s:bin_dir.'preview.sh',
\ 'tags': s:bin_dir.'tags.pl' } \ 'tags': s:bin_dir.'tags.pl' }
@@ -41,7 +41,6 @@ if s:is_win
else else
let s:bin.preview = fnamemodify(s:bin.preview, ':8') let s:bin.preview = fnamemodify(s:bin.preview, ':8')
endif endif
let s:bin.preview = 'bash '.escape(s:bin.preview, '\')
endif endif
let s:wide = 120 let s:wide = 120
@@ -76,6 +75,11 @@ 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(...)
let bash_path = exepath('bash')
if empty(bash_path)
throw 'bash is not in PATH'
endif
let is_wsl_bash = bash_path =~? 'Windows[/\\]system32[/\\]bash.exe$'
" Default options " Default options
let options = {} let options = {}
let window = '' let window = ''
@@ -104,7 +108,14 @@ function! fzf#vim#with_preview(...)
if len(window) if len(window)
let preview += ['--preview-window', window] let preview += ['--preview-window', window]
endif endif
let preview += ['--preview', (s:is_win ? s:bin.preview : fzf#shellescape(s:bin.preview)).' '.placeholder] if s:is_win
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 += ['--preview', preview_cmd.' '.placeholder]
if len(args) if len(args)
call extend(preview, ['--bind', join(map(args, 'v:val.":toggle-preview"'), ',')]) call extend(preview, ['--bind', join(map(args, 'v:val.":toggle-preview"'), ',')])