Skip to content
Snippets Groups Projects
Unverified Commit 6c0fd7f9 authored by Jan Edmund Lazo's avatar Jan Edmund Lazo Committed by Junegunn Choi
Browse files

[vim] FZF command to handle Windows paths with spaces

- Use noshellslash for strict path expansion in fzf#run and s:cmd
  (shellescape depends on shellslash)
- Double-quote the fzf command for cmd.exe
- Add fzf#shellescape to encapsulate the logic
- Close #786
parent 42a2371d
No related branches found
No related tags found
No related merge requests found
......@@ -237,6 +237,19 @@ function! fzf#wrap(...)
return opts
endfunction
function! fzf#shellescape(path)
if has('win32') || has('win64')
let shellslash = &shellslash
try
set noshellslash
return shellescape(a:path)
finally
let &shellslash = shellslash
endtry
endif
return shellescape(a:path)
endfunction
function! fzf#run(...) abort
try
let oshell = &shell
......@@ -244,7 +257,7 @@ try
if has('win32') || has('win64')
set shell=cmd.exe
set shellslash
set noshellslash
else
set shell=sh
endif
......@@ -398,6 +411,8 @@ function! s:execute(dict, command, temps) abort
let fmt = type(Launcher) == 2 ? call(Launcher, []) : Launcher
if has('unix')
let escaped = "'".substitute(escaped, "'", "'\"'\"'", 'g')."'"
elseif has('win32') || has('win64')
let escaped = '"'.(escaped).'"'
endif
let command = printf(fmt, escaped)
else
......@@ -615,10 +630,10 @@ function! s:cmd(bang, ...) abort
let args = copy(a:000)
let opts = { 'options': '--multi ' }
if len(args) && isdirectory(expand(args[-1]))
let opts.dir = substitute(substitute(remove(args, -1), '\\\(["'']\)', '\1', 'g'), '/*$', '/', '')
let opts.options .= ' --prompt '.shellescape(opts.dir)
let opts.dir = substitute(substitute(remove(args, -1), '\\\(["'']\)', '\1', 'g'), '[/\\]*$', '/', '')
let opts.options .= ' --prompt '.fzf#shellescape(opts.dir)
else
let opts.options .= ' --prompt '.shellescape(s:shortpath())
let opts.options .= ' --prompt '.fzf#shellescape(s:shortpath())
endif
let opts.options .= ' '.join(args)
call fzf#run(fzf#wrap('FZF', opts, a:bang))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment