mirror of
https://github.com/tpope/vim-fugitive.git
synced 2025-11-08 11:33:47 -05:00
Better PowerShell support
This commit is contained in:
@@ -42,7 +42,7 @@ function! s:Uniq(list) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:winshell() abort
|
function! s:winshell() abort
|
||||||
return has('win32') && &shellcmdflag =~# '^/\|^-Command$'
|
return has('win32') && &shellcmdflag !~# '^-'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:shellesc(arg) abort
|
function! s:shellesc(arg) abort
|
||||||
@@ -416,14 +416,16 @@ endfunction
|
|||||||
|
|
||||||
function! s:BuildEnvPrefix(env) abort
|
function! s:BuildEnvPrefix(env) abort
|
||||||
let pre = ''
|
let pre = ''
|
||||||
for [var, val] in items(a:env)
|
let env = items(a:env)
|
||||||
if s:winshell()
|
if empty(env)
|
||||||
let pre .= 'set ' . var . '=' . s:shellesc(val) . '& '
|
return ''
|
||||||
else
|
elseif &shellcmdflag =~# '-Command'
|
||||||
let pre = (len(pre) ? pre : 'env ') . var . '=' . s:shellesc(val) . ' '
|
return join(map(env, '"$Env:" . v:val[0] . " = ''" . substitute(v:val[1], "''", "''''", "g") . "''; "'), '')
|
||||||
endif
|
elseif s:winshell()
|
||||||
endfor
|
return join(map(env, '"set " . substitute(join(v:val, "="), "[&|<>^]", "^^^&", "g") . "& "'), '')
|
||||||
return pre
|
else
|
||||||
|
return 'env ' . s:shellesc(map(env, 'join(v:val, "=")')) . ' '
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:BuildShell(dir, env, args) abort
|
function! s:BuildShell(dir, env, args) abort
|
||||||
@@ -1265,17 +1267,16 @@ function! fugitive#setfperm(url, perm) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:TempCmd(out, cmd) abort
|
function! s:TempCmd(out, cmd) abort
|
||||||
let prefix = ''
|
|
||||||
try
|
try
|
||||||
let cmd = (type(a:cmd) == type([]) ? fugitive#Prepare(a:cmd) : a:cmd)
|
let cmd = (type(a:cmd) == type([]) ? fugitive#Prepare(a:cmd) : a:cmd)
|
||||||
let redir = ' > ' . a:out
|
let redir = ' > ' . a:out
|
||||||
if s:winshell()
|
if (s:winshell() || &shellcmdflag ==# '-Command') && !has('nvim')
|
||||||
let cmd_escape_char = &shellxquote == '(' ? '^' : '^^^'
|
let cmd_escape_char = &shellxquote == '(' ? '^' : '^^^'
|
||||||
return s:SystemError('cmd /c "' . prefix . s:gsub(cmd, '[<>]', cmd_escape_char . '&') . redir . '"')
|
return s:SystemError('cmd /c "' . s:gsub(cmd, '[<>%]', cmd_escape_char . '&') . redir . '"')
|
||||||
elseif &shell =~# 'fish'
|
elseif &shell =~# 'fish'
|
||||||
return s:SystemError(' begin;' . prefix . cmd . redir . ';end ')
|
return s:SystemError(' begin;' . cmd . redir . ';end ')
|
||||||
else
|
else
|
||||||
return s:SystemError(' (' . prefix . cmd . redir . ') ')
|
return s:SystemError(' (' . cmd . redir . ') ')
|
||||||
endif
|
endif
|
||||||
endtry
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
@@ -3381,7 +3382,7 @@ function! s:CommitSubcommand(line1, line2, range, bang, mods, args, ...) abort
|
|||||||
let msgfile = fugitive#Find('.git/COMMIT_EDITMSG', dir)
|
let msgfile = fugitive#Find('.git/COMMIT_EDITMSG', dir)
|
||||||
let outfile = tempname()
|
let outfile = tempname()
|
||||||
try
|
try
|
||||||
if s:winshell()
|
if s:winshell() || &shellcmdflag ==# '-Command'
|
||||||
let command = 'set GIT_EDITOR=false& '
|
let command = 'set GIT_EDITOR=false& '
|
||||||
else
|
else
|
||||||
let command = 'env GIT_EDITOR=false '
|
let command = 'env GIT_EDITOR=false '
|
||||||
@@ -3536,7 +3537,7 @@ function! s:RebaseSequenceAborter() abort
|
|||||||
\ 'echo exec false | cat - "$1" > "$1.fugitive"',
|
\ 'echo exec false | cat - "$1" > "$1.fugitive"',
|
||||||
\ 'mv "$1.fugitive" "$1"'],
|
\ 'mv "$1.fugitive" "$1"'],
|
||||||
\ temp)
|
\ temp)
|
||||||
let s:rebase_sequence_aborter = temp
|
let s:rebase_sequence_aborter = FugitiveGitPath(temp)
|
||||||
endif
|
endif
|
||||||
return s:rebase_sequence_aborter
|
return s:rebase_sequence_aborter
|
||||||
endfunction
|
endfunction
|
||||||
@@ -4416,13 +4417,7 @@ function! s:OpenExec(cmd, mods, args, ...) abort
|
|||||||
let dir = a:0 ? s:Dir(a:1) : s:Dir()
|
let dir = a:0 ? s:Dir(a:1) : s:Dir()
|
||||||
let temp = tempname()
|
let temp = tempname()
|
||||||
let columns = get(g:, 'fugitive_columns', 80)
|
let columns = get(g:, 'fugitive_columns', 80)
|
||||||
if columns <= 0
|
let env = s:BuildEnvPrefix({'COLUMNS': columns})
|
||||||
let env = ''
|
|
||||||
elseif s:winshell()
|
|
||||||
let env = 'set COLUMNS=' . columns . '& '
|
|
||||||
else
|
|
||||||
let env = 'env COLUMNS=' . columns . ' '
|
|
||||||
endif
|
|
||||||
silent! execute '!' . escape(env . s:UserCommand(dir, ['--no-pager'] + a:args), '!#%') .
|
silent! execute '!' . escape(env . s:UserCommand(dir, ['--no-pager'] + a:args), '!#%') .
|
||||||
\ (&shell =~# 'csh' ? ' >& ' . temp : ' > ' . temp . ' 2>&1')
|
\ (&shell =~# 'csh' ? ' >& ' . temp : ' > ' . temp . ' 2>&1')
|
||||||
redraw!
|
redraw!
|
||||||
|
|||||||
Reference in New Issue
Block a user