Windows: libuv_process_spawn(): Allow libuv argument quoting/escaping.

Closes #5360
References #3305
Reverts commit dc9652e68d.

Disabling the quoting was does not solve the problem in general, and
we would end up having to handle the quoting ourselves.

See: https://github.com/JuliaLang/julia/issues/13776
This commit is contained in:
Rui Abreu Ferreira 2016-08-27 01:27:01 +01:00 committed by Justin M. Keyes
parent 8a5962023f
commit a05ebf4a2d
2 changed files with 12 additions and 9 deletions

View File

@ -4666,11 +4666,16 @@ jobstart({cmd}[, {opts}]) {Nvim} *jobstart()*
Spawns {cmd} as a job. If {cmd} is a |List| it is run
directly. If {cmd} is a |String| it is processed like this: >
:call jobstart(split(&shell) + split(&shellcmdflag) + ['{cmd}'])
< NOTE: read |shell-unquoting| before constructing any lists
with 'shell' or 'shellcmdflag' options. The above call is
only written to show the idea, one needs to perform unquoting
and do split taking quotes into account.
< NOTE: This only shows the idea; see |shell-unquoting| before
constructing lists with 'shell' or 'shellcmdflag'.
NOTE: On Windows if {cmd} is a List, cmd[0] must be a valid
executable (.exe, .com). If the executable is in $PATH it can
be called by name, with or without an extension: >
:call jobstart(['ping', 'neovim.io'])
< If it is a path (not a name), it must include the extension: >
:call jobstart(['System32\ping.exe', 'neovim.io'])
<
{opts} is a dictionary with these keys:
on_stdout: stdout event handler (function name or |Funcref|)
on_stderr: stderr event handler (function name or |Funcref|)
@ -7099,9 +7104,8 @@ synstack({lnum}, {col}) *synstack()*
valid positions.
system({cmd} [, {input}]) *system()* *E677*
Get the output of the shell command {cmd} as a |string|. {cmd}
will be run the same as in |jobstart()|. See |systemlist()|
to get the output as a |List|.
Get the output of {cmd} as a |string| (use |systemlist()| to
get a |List|). {cmd} is treated exactly as in |jobstart()|.
Not to be used for interactive commands.
If {input} is a string it is written to a pipe and passed as

View File

@ -19,8 +19,7 @@ bool libuv_process_spawn(LibuvProcess *uvproc)
Process *proc = (Process *)uvproc;
uvproc->uvopts.file = proc->argv[0];
uvproc->uvopts.args = proc->argv;
uvproc->uvopts.flags = UV_PROCESS_WINDOWS_HIDE
| UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS;
uvproc->uvopts.flags = UV_PROCESS_WINDOWS_HIDE;
if (proc->detach) {
uvproc->uvopts.flags |= UV_PROCESS_DETACHED;
}