mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 00:08:19 +00:00
unify jobstart, termopen, and system interfaces
For any of these functions, if {cmd} is a string, execute "&shell &shellcmdflag '{cmd}'", or simply {cmd} if it's a list. In termopen(), if the 'name' option is not supplied, try to guess using '{cmd}' (string) or {cmd}[0] (list). Simplify ex_terminal to use the string form of termopen(). termopen: get name from argument Convert list_to_argv to tv_to_argv. Helped-by: Björn Linse <@bfredl> Helped-by: oni-link <knil.ino@gmail.com> Helped-by: Thiago de Arruda <@tarruda>
This commit is contained in:
@@ -9410,23 +9410,19 @@ static void ex_folddo(exarg_T *eap)
|
||||
|
||||
static void ex_terminal(exarg_T *eap)
|
||||
{
|
||||
char *name = NULL;
|
||||
char cmd[512];
|
||||
if (strcmp((char *)eap->arg, "") == 0) {
|
||||
snprintf(cmd, sizeof(cmd), "['%s']", (char *)p_sh);
|
||||
name = (char *)p_sh;
|
||||
} else {
|
||||
// Escape quotes and slashes so they get sent literally.
|
||||
// We will call termopen() with ['shell'] if not given a {cmd}.
|
||||
char *name = (char *)p_sh;
|
||||
char *lquote = "['";
|
||||
char *rquote = "']";
|
||||
if (*eap->arg != NUL) {
|
||||
name = (char *)vim_strsave_escaped(eap->arg, (char_u *)"\"\\");
|
||||
snprintf(cmd, sizeof(cmd), "['%s','%s',\"%s\"]",
|
||||
(char *)p_sh, (char *)p_shcf, name);
|
||||
lquote = rquote = "\"";
|
||||
}
|
||||
|
||||
char ex_cmd[512];
|
||||
snprintf(ex_cmd, sizeof(ex_cmd),
|
||||
":enew%s | call termopen(%s, {'name':\"%s\"}) | startinsert",
|
||||
eap->forceit==TRUE ? "!" : "", cmd, name);
|
||||
|
||||
":enew%s | call termopen(%s%s%s) | startinsert",
|
||||
eap->forceit==TRUE ? "!" : "", lquote, name, rquote);
|
||||
do_cmdline_cmd((uint8_t *)ex_cmd);
|
||||
|
||||
if (name != (char *)p_sh) {
|
||||
|
Reference in New Issue
Block a user