132

GitHub - prabirshrestha/async.vim: normalize async job control api for vim and n...

 6 years ago
source link: https://github.com/prabirshrestha/async.vim
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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'),
    \ 'normalize': 'array'
\ })

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

" If you want to get the process id of the job
let pid = async#job#pid(jobid)

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

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

APIs are based on neovim's job control APIs.

Normalizing data

By default stdout and stderr data is an array. This is a noop for neovim but requiring using split in vim. This can tend to be costly if you are want a string since you are joining the splited string. To avoid this unncessary conversion you can normalize it to string so it is a noop in vim but a join for neovim. If you prefer to disable normalization pass normalization as raw.

normalize: 'array' " Valid values are 'array', 'string' or 'raw'

Embedding

Async.vim can be either embedded with other plugins or be used as an external plugin. If you want to embed run the following vim command.

:AsyncEmbed path=./autoload/myplugin/job.vim namespace=myplugin#job

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!!!)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK