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! * autocmd TermClose 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