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.
