Run preview script in batchfile for Windows

Bypasses the following issues in Windows:
1. Neovim does not support 8.3 filenames
   ie. fnamemodify(path, ':8')
2. fzf binary cannot parse output of fzf#shellescape
   It assumes that preview command is run in sh, not cmd.exe
This commit is contained in:
Jan Edmund Lazo 2017-08-20 22:42:45 -04:00
parent 057853a248
commit 71cc4c5037

View file

@ -35,15 +35,6 @@ let s:bin = {
\ 'preview': s:bin_dir.(executable('ruby') ? 'preview.rb' : 'preview.sh'),
\ 'tags': s:bin_dir.'tags.pl' }
let s:TYPE = {'dict': type({}), 'funcref': type(function('call')), 'string': type(''), 'list': type([])}
if s:is_win
if &shellslash
let s:bin.preview = fnamemodify(s:bin.preview, ':8')
else
set shellslash
let s:bin.preview = fnamemodify(s:bin.preview, ':8')
set noshellslash
endif
endif
function! s:merge_opts(dict, eopts)
if empty(a:eopts)
@ -83,7 +74,17 @@ function! fzf#vim#with_preview(...)
call remove(args, 0)
endif
let preview = ['--preview-window', window, '--preview', s:bin.preview.' '.(window =~ 'up\|down' ? '-v' : '').' {}']
if s:is_win
if exists('s:preview_script')
silent! call delete(s:preview_script)
endif
let s:preview_script = tempname().'.bat'
call writefile(['@echo off', fzf#shellescape(s:bin.preview).' %*'], s:preview_script)
let script = s:preview_script
else
let script = s:bin.preview
endif
let preview = ['--preview-window', window, '--preview', script.(window =~ 'up\|down' ? ' -v ' : ' ').'{}']
if len(args)
call extend(preview, ['--bind', join(map(args, 'v:val.":toggle-preview"'), ',')])