normalize async job control api for vim and neovim
Switch branches/tags
Nothing to show
Clone or download
k-takata and prabirshrestha Fix that async#job#wait() always returns 0 (#17)
Use 'return' instead of 'call' to fix it.
Latest commit c5b236f Aug 25, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
autoload/async Fix that async#job#wait() always returns 0 (#17) Aug 25, 2018
.travis.yml added .travis.yml and vint for vim linting Jul 11, 2017
LICENSE added MIT License Mar 21, 2016
README.md Fix that async#job#wait() always returns 0 (#17) Aug 25, 2018

README.md

async.vim

normalize async job control api for vim and neovim

sample usage

function! s:handler(job_id, data, event_type)
    echo a:job_id . ' ' . a:event_type
    echo join(a:data, "\n")
endfunction

if has('win32') || has('win64')
    let argv = ['cmd', '/c', 'dir c:\ /b']
else
    let argv = ['bash', '-c', 'ls']
endif

let jobid = async#job#start(argv, {
    \ 'on_stdout': function('s:handler'),
    \ 'on_stderr': function('s:handler'),
    \ 'on_exit': function('s:handler'),
\ })

if jobid > 0
    echom 'job started'
else
    echom 'job failed to start'
endif

" If you want to wait the job:
call async#job#wait([job], 5000)  " timeout: 5 sec

" If you want to stop the job:
call async#job#stop(job)

APIs

APIs are based on neovim's job control APIs.

Embedding

Async.vim can be either embedded with other plugins or be used as an external plugin. If you want to embed all you need is to change these 4 function names async#job# to what ever you want. E.g.:

" public apis {{{
function! yourplugin#job#start(cmd, opts) abort
    return s:job_start(a:cmd, a:opts)
endfunction

function! yourplugin#job#stop(jobid) abort
    call s:job_stop(a:jobid)
endfunction

function! yourplugin#job#send(jobid, data) abort
    call s:job_send(a:jobid, a:data)
endfunction

function! yourplugin#job#wait(jobids, ...) abort
    let l:timeout = get(a:000, 0, -1)
    return s:job_wait(a:jobids, l:timeout)
endfunction
" }}}

Todos

  • Fallback to sync system() calls in vim that doesn't support job
  • job_stop and job_send is treated as noop when using system()
  • on_stderr doesn't work when using system()
  • Fallback to python/ruby threads and vimproc instead of using system() for better compatibility (PRs welcome!!!)