Hello!

I have been trying to run a job asynchronously and capture the output, but 
despite reading the docs many times I can't get it to work.

Ideally I want all the diff output in one go, rather than line by line, so I 
first tried using only an on_exit callback:

    let cmd = 'diff A B'
    let job = job_start(cmd, {'exit_cb': 'MyExitHandler'})

And then:

    function! MyExitHandler(job, exit_status)
      let data = ch_read(a:job)
      echom data
    endfunction

I would expect the handler to be called just about immediately but nothing 
happens.  After 30s of waiting I get bored and move the cursor (if I'm in 
normal mode) / press <Escape> (if I'm in insert mode), at which point "E906: 
not an open channel" is echoed.

>From this I deduce that the handler isn't called when the job exits, but 
>instead some time later as and when vim checks up on the job.

So I tried using an on_stdout callback as well:

    let job = job_start(cmd, {'on_stdout': 'MyOutHandler', 'exit_cb': 
'MyExitHandler'})

And also:

    function! MyOutHandler(channel, message)
      echom a:message
    endfunction

This handler gets called just about immediately, as expected, but a:message is 
always 'DETACH', not the diff output.  And then a few seconds later the exit 
handler echoes its E906 error.

Please could somebody tell me what I'm doing wrong?

I'm using Vim v7.4.1770.

Many thanks in advance,

Andrew Stewart

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui