mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-11 03:15:49 +08:00
32 lines
923 B
VimL
32 lines
923 B
VimL
|
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
|