mirror of
https://github.com/junegunn/fzf.vim.git
synced 2025-12-06 12:44:24 +08:00
[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:
@@ -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',
|
||||||
|
|||||||
Reference in New Issue
Block a user