mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 01:20:05 +08:00
Add sync support
This commit is contained in:
parent
607882765f
commit
3e8a2dddc1
@ -5,11 +5,10 @@ endfunction
|
|||||||
" make vim and neovim use same job func.
|
" make vim and neovim use same job func.
|
||||||
let s:self = {}
|
let s:self = {}
|
||||||
let s:self.jobs = {}
|
let s:self.jobs = {}
|
||||||
let s:self.nvim_job = has('nvim')
|
let s:self.nvim_job = has('nvim') && 0
|
||||||
let s:self.vim_job = !has('nvim') && has('job') && has('patch-8.0.0027')
|
let s:self.vim_job = !has('nvim') && has('job') && has('patch-8.0.0027') && 0
|
||||||
if !s:self.nvim_job && !s:self.vim_job
|
let s:self.vim_co = SpaceVim#api#import('vim#compatible')
|
||||||
let s:self.vim_co = SpaceVim#api#import('vim#compatible')
|
|
||||||
endif
|
|
||||||
function! s:self.warn(...) abort
|
function! s:self.warn(...) abort
|
||||||
if len(a:000) == 0
|
if len(a:000) == 0
|
||||||
echohl WarningMsg | echom 'Current version do not support job feature, fallback to sync system()' | echohl None
|
echohl WarningMsg | echom 'Current version do not support job feature, fallback to sync system()' | echohl None
|
||||||
@ -98,16 +97,19 @@ function! s:self.start(argv, ...) abort
|
|||||||
let opts = {}
|
let opts = {}
|
||||||
endif
|
endif
|
||||||
let output = self.vim_co.systemlist(a:argv)
|
let output = self.vim_co.systemlist(a:argv)
|
||||||
let id = len(self.jobs) + 1
|
let id = -1
|
||||||
if v:shell_error
|
if v:shell_error
|
||||||
if has_key(opts,'on_stderr')
|
if has_key(opts,'on_stderr')
|
||||||
call call(opts.on_stderr, [id, output, 'on_stderr'])
|
call call(opts.on_stderr, [id, output, 'stderr'])
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
if has_key(opts,'on_stdout')
|
if has_key(opts,'on_stdout')
|
||||||
call call(opts.on_stderr, [id, output, 'on_stdout'])
|
call call(opts.on_stdout, [id, output, 'stdout'])
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
if has_key(opts,'on_exit')
|
||||||
|
call call(opts.on_exit, [id, v:shell_error, 'exit'])
|
||||||
|
endif
|
||||||
return id
|
return id
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -2,6 +2,7 @@ function! SpaceVim#api#vim#compatible#get() abort
|
|||||||
return map({
|
return map({
|
||||||
\ 'execute' : '',
|
\ 'execute' : '',
|
||||||
\ 'system' : '',
|
\ 'system' : '',
|
||||||
|
\ 'systemlist' : '',
|
||||||
\ },
|
\ },
|
||||||
\ "function('s:' . v:key)"
|
\ "function('s:' . v:key)"
|
||||||
\ )
|
\ )
|
||||||
|
@ -3,7 +3,7 @@ Execute ( SpaceVim api: job ):
|
|||||||
let argv = ['cat']
|
let argv = ['cat']
|
||||||
let g:stdout = ''
|
let g:stdout = ''
|
||||||
let stderr = ''
|
let stderr = ''
|
||||||
let exit = 1
|
let exit_data = 1
|
||||||
function! s:on_stdout(id, data, event) abort
|
function! s:on_stdout(id, data, event) abort
|
||||||
if a:event ==# 'stdout'
|
if a:event ==# 'stdout'
|
||||||
for a in a:data
|
for a in a:data
|
||||||
@ -12,7 +12,7 @@ Execute ( SpaceVim api: job ):
|
|||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
elseif a:event ==# 'exit'
|
elseif a:event ==# 'exit'
|
||||||
let g:exit = a:data
|
let g:exit_data = a:data
|
||||||
else
|
else
|
||||||
let g:stderr = a:data
|
let g:stderr = a:data
|
||||||
endif
|
endif
|
||||||
@ -23,11 +23,17 @@ Execute ( SpaceVim api: job ):
|
|||||||
\ 'on_exit' : function('s:on_stdout'),
|
\ 'on_exit' : function('s:on_stdout'),
|
||||||
\ }
|
\ }
|
||||||
let jobid = job.start(argv,opt)
|
let jobid = job.start(argv,opt)
|
||||||
call job.send(jobid, 'foo')
|
if jobid >= 0
|
||||||
sleep 10m
|
call job.send(jobid, 'foo')
|
||||||
AssertEqual stdout, 'foo'
|
sleep 10m
|
||||||
AssertEqual job.status(jobid), 'run'
|
AssertEqual stdout, 'foo'
|
||||||
call job.stop(jobid)
|
AssertEqual job.status(jobid), 'run'
|
||||||
AssertEqual exit, 1
|
call job.stop(jobid)
|
||||||
|
AssertEqual exit_data, 1
|
||||||
|
else
|
||||||
|
let jobid = job.start(['echo', 'foo'],opt)
|
||||||
|
AssertEqual stdout, 'foo'
|
||||||
|
AssertEqual exit_data, 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user