mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-09 16:30:05 +08:00
32 lines
923 B
VimL
Vendored
32 lines
923 B
VimL
Vendored
function! gina#command#_shell#call(range, args, mods) abort
|
|
let git = gina#core#get()
|
|
let args = gina#process#build_raw_args(git, s:build_args(git, a:args))
|
|
let cmdline = join(map(args, 's:shellescape(v:val)'))
|
|
if has('nvim')
|
|
tabnew
|
|
execute ':terminal' cmdline
|
|
augroup gina_command__shell_internal
|
|
autocmd! * <buffer>
|
|
autocmd TermClose <buffer> call gina#core#emitter#emit('modified:delay')
|
|
augroup END
|
|
else
|
|
execute ':!' cmdline
|
|
call gina#core#emitter#emit('modified:delay')
|
|
endif
|
|
endfunction
|
|
|
|
|
|
" Private --------------------------------------------------------------------
|
|
function! s:build_args(git, args) abort
|
|
let args = a:args.clone()
|
|
if args.get(0) ==# '_shell'
|
|
" Remove leading '_shell' if exists
|
|
call args.pop(0)
|
|
endif
|
|
return args.lock()
|
|
endfunction
|
|
|
|
function! s:shellescape(val) abort
|
|
return a:val =~# '\s' ? shellescape(a:val) : a:val
|
|
endfunction
|