On Wed, Feb 3, 2016 at 2:10 PM, LCD 47 <[email protected]> wrote:
> On 3 February 2016, Bram Moolenaar <[email protected]> wrote:
>>
>> Lcd wrote:
>>
>> > On 3 February 2016, Danek Duvall <[email protected]> wrote:
>> > [...]
>> > > I think the most reliable thing to do here is to have a way to
>> > > know the pid and kill it directly, but since ! goes through
>> > > a shell, you don't have any way of knowing what the pid of
>> > > test_channel.py is.
>> >
>> >     Or just make the server write its PID to a file with an unique
>> > name.  This is still not ideal, but it's probably good enough for
>> > tests.
>>
>> Like we do for the port number.  OK, that can work for now.  But we
>> need job control functionality anyway.  We should use that once it's
>> implemented.
>>
>> Vim can already start jobs, but currently always waits for them to
>> finish (with "!cmd" or system("cmd")).  Should not be too difficult to
>> run a job in the background and get its PID.  At least on Unix, not
>> sure about MS-Windows.
>
>     Sure, job control is long overdue, but IMO it wouldn't be simple.
> Once you can put a process in background you need to be able to deal
> with a table of background processes, and this means waitpid(), SIGCHLD
> (perhaps mapped to an autocmd), kill(), timeouts, select(), pipes, the
> full range of file redirections, and careful (OS-dependent) handling of
> a pile of signals.
>
>     That said, it would be a game changer.  People came up with things
> like vimproc:
>
>         https://github.com/Shougo/vimproc.vim
>
>     And then vimproc's interface was found to be too low-level, so they
> came up with quickrun, which builds over vimproc:
>
>         https://github.com/thinca/vim-quickrun
>
>     A simpler (but in many ways less satisfactory) aproach might be
> dispatch:
>
>         https://github.com/tpope/vim-dispatch
>
>     There are other, somewhat less popular approches:
>
>         https://github.com/idbrii/AsyncCommand
>         https://github.com/xolox/vim-misc
>         https://github.com/xolox/vim-shell
>
>     And then there's NeoVim, which has an embedded terminal to deal with
> all this. :)

Neovim uses libuv[1] to achieve job control in a well-tested,
widely-used (node.js...) cross-platform manner. The embedded terminal
is provided by libvterm[2]. libuv runs on every platform that Vim *in
reality* runs on. Recently, Vim finally admitted that it doesn't run
on DOS, Win95, and Amiga. Perhaps using a widely-used cross-platform
library like libuv is worth considering for Vim, instead of
re-inventing it.

[1] https://github.com/libuv/libuv
[2] http://bazaar.leonerd.org.uk/c/libvterm/

---
Justin M. Keyes

-- 
-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui