27 lines
1.2 KiB
VimL
27 lines
1.2 KiB
VimL
|
" This callback will be executed when the entire command is completed
|
||
|
function! BackgroundCommandClose(channel)
|
||
|
" Read the output from the command into the quickfix window
|
||
|
unlet g:backgroundCommandOutput
|
||
|
endfunction
|
||
|
|
||
|
function! RunBackgroundCommand(command)
|
||
|
" Make sure we're running VIM version 8 or higher.
|
||
|
if v:version < 800
|
||
|
echoerr 'RunBackgroundCommand requires VIM version 8 or higher'
|
||
|
return
|
||
|
endif
|
||
|
if exists('g:backgroundCommandOutput')
|
||
|
echo 'Already running task in background'
|
||
|
else
|
||
|
echo 'Running task in background'
|
||
|
" Launch the job.
|
||
|
" Notice that we're only capturing out, and not err here. This is because, for some reason, the callback
|
||
|
" will not actually get hit if we write err out to the same file. Not sure if I'm doing this wrong or?
|
||
|
let g:backgroundCommandOutput = tempname()
|
||
|
call job_start(a:command, {'close_cb': 'BackgroundCommandClose', 'out_io': 'file', 'out_name': g:backgroundCommandOutput})
|
||
|
endif
|
||
|
endfunction
|
||
|
|
||
|
" So we can use :BackgroundCommand to call our function.
|
||
|
command! -nargs=+ -complete=shellcmd RunBackgroundCommand call RunBackgroundCommand(<q-args>)
|