[GFiles?] Fix preview on windows (wsl bash + git_install_folder/usr/bash) (#1360)

* Fix preview on GFiles? on Windows+WSL
* Fix preview on GFiles? on Windows using gitInstallFolder\usr/bin\bash.exe

Co-authored-by: Minh-Tam TRAN <c_mtran@capsuletech.com>
Co-authored-by: Minh-Tam TRAN <minh-tam.tran@younited-credit.fr>
This commit is contained in:
Melandel
2022-01-24 10:02:50 +01:00
committed by GitHub
parent 66cb8b8264
commit 91332acb1c

View File

@@ -30,6 +30,7 @@ set cpo&vim
let s:min_version = '0.23.0' let s:min_version = '0.23.0'
let s:is_win = has('win32') || has('win64') let s:is_win = has('win32') || has('win64')
let s:is_wsl_bash = s:is_win && (exepath('bash') =~? 'Windows[/\\]system32[/\\]bash.exe$')
let s:layout_keys = ['window', 'up', 'down', 'left', 'right'] let s:layout_keys = ['window', 'up', 'down', 'left', 'right']
let s:bin_dir = expand('<sfile>:p:h:h:h').'/bin/' let s:bin_dir = expand('<sfile>:p:h:h:h').'/bin/'
let s:bin = { let s:bin = {
@@ -40,7 +41,10 @@ if s:is_win
if has('nvim') if has('nvim')
let s:bin.preview = split(system('for %A in ("'.s:bin.preview.'") do @echo %~sA'), "\n")[0] let s:bin.preview = split(system('for %A in ("'.s:bin.preview.'") do @echo %~sA'), "\n")[0]
else else
let s:bin.preview = fnamemodify(s:bin.preview, ':8') let preview_path = s:is_wsl_bash
\ ? substitute(s:bin.preview, '^\([A-Z]\):', '/mnt/\L\1', '')
\ : fnamemodify(s:bin.preview, ':8')
let s:bin.preview = substitute(preview_path, '\', '/', 'g')
endif endif
endif endif
@@ -139,15 +143,14 @@ function! fzf#vim#with_preview(...)
let preview += ['--preview-window', window] let preview += ['--preview-window', window]
endif endif
if s:is_win if s:is_win
let is_wsl_bash = exepath('bash') =~? 'Windows[/\\]system32[/\\]bash.exe$'
if empty($MSWINHOME) if empty($MSWINHOME)
let $MSWINHOME = $HOME let $MSWINHOME = $HOME
endif endif
if is_wsl_bash && $WSLENV !~# '[:]\?MSWINHOME\(\/[^:]*\)\?\(:\|$\)' if s:is_wsl_bash && $WSLENV !~# '[:]\?MSWINHOME\(\/[^:]*\)\?\(:\|$\)'
let $WSLENV = 'MSWINHOME/u:'.$WSLENV let $WSLENV = 'MSWINHOME/u:'.$WSLENV
endif endif
let preview_cmd = 'bash '.(is_wsl_bash let preview_cmd = 'bash '.(s:is_wsl_bash
\ ? substitute(substitute(s:bin.preview, '^\([A-Z]\):', '/mnt/\L\1', ''), '\', '/', 'g') \ ? s:bin.preview
\ : escape(s:bin.preview, '\')) \ : escape(s:bin.preview, '\'))
else else
let preview_cmd = fzf#shellescape(s:bin.preview) let preview_cmd = fzf#shellescape(s:bin.preview)
@@ -621,11 +624,12 @@ function! fzf#vim#gitfiles(args, ...)
" Here be dragons! " Here be dragons!
" We're trying to access the common sink function that fzf#wrap injects to " We're trying to access the common sink function that fzf#wrap injects to
" the options dictionary. " the options dictionary.
let bar = s:is_win ? '^|' : '|'
let preview = printf( let preview = printf(
\ 'bash -c "if [[ {1} =~ M ]]; then %s; else %s {-1}; fi"', \ 'bash -c "if [[ {1} =~ M ]]; then %s; else %s {-1}; fi"',
\ executable('delta') \ executable('delta')
\ ? 'git diff -- {-1} | delta --width $FZF_PREVIEW_COLUMNS --file-style=omit | sed 1d' \ ? 'git diff -- {-1} '.bar.' delta --width $FZF_PREVIEW_COLUMNS --file-style=omit '.bar.' sed 1d'
\ : 'git diff --color=always -- {-1} | sed 1,4d', \ : 'git diff --color=always -- {-1} '.bar.' sed 1,4d',
\ s:bin.preview) \ s:bin.preview)
let wrapped = fzf#wrap({ let wrapped = fzf#wrap({
\ 'source': 'git -c color.status=always status --short --untracked-files=all', \ 'source': 'git -c color.status=always status --short --untracked-files=all',