forked from aniani/vim
patch 8.1.0050: $VIM_TERMINAL is also set when not in a terminal window
Problem: $VIM_TERMINAL is also set when not in a terminal window. Solution: Pass a flag to indicate whether the job runs in a terminal.
This commit is contained in:
parent
d7a137fb0d
commit
493359eb3b
@ -5525,7 +5525,11 @@ job_check_ended(void)
|
|||||||
* Returns NULL when out of memory.
|
* Returns NULL when out of memory.
|
||||||
*/
|
*/
|
||||||
job_T *
|
job_T *
|
||||||
job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg)
|
job_start(
|
||||||
|
typval_T *argvars,
|
||||||
|
char **argv_arg,
|
||||||
|
jobopt_T *opt_arg,
|
||||||
|
int is_terminal UNUSED)
|
||||||
{
|
{
|
||||||
job_T *job;
|
job_T *job;
|
||||||
char_u *cmd = NULL;
|
char_u *cmd = NULL;
|
||||||
@ -5679,7 +5683,7 @@ job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg)
|
|||||||
ch_log(NULL, "Starting job: %s", (char *)ga.ga_data);
|
ch_log(NULL, "Starting job: %s", (char *)ga.ga_data);
|
||||||
ga_clear(&ga);
|
ga_clear(&ga);
|
||||||
}
|
}
|
||||||
mch_job_start(argv, job, &opt);
|
mch_job_start(argv, job, &opt, is_terminal);
|
||||||
#else
|
#else
|
||||||
ch_log(NULL, "Starting job: %s", (char *)cmd);
|
ch_log(NULL, "Starting job: %s", (char *)cmd);
|
||||||
mch_job_start((char *)cmd, job, &opt);
|
mch_job_start((char *)cmd, job, &opt);
|
||||||
|
@ -7254,7 +7254,7 @@ f_job_start(typval_T *argvars, typval_T *rettv)
|
|||||||
rettv->v_type = VAR_JOB;
|
rettv->v_type = VAR_JOB;
|
||||||
if (check_restricted() || check_secure())
|
if (check_restricted() || check_secure())
|
||||||
return;
|
return;
|
||||||
rettv->vval.v_job = job_start(argvars, NULL, NULL);
|
rettv->vval.v_job = job_start(argvars, NULL, NULL, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -4159,7 +4159,11 @@ wait4pid(pid_t child, waitstatus *status)
|
|||||||
* Set the environment for a child process.
|
* Set the environment for a child process.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
set_child_environment(long rows, long columns, char *term)
|
set_child_environment(
|
||||||
|
long rows,
|
||||||
|
long columns,
|
||||||
|
char *term,
|
||||||
|
int is_terminal UNUSED)
|
||||||
{
|
{
|
||||||
# ifdef HAVE_SETENV
|
# ifdef HAVE_SETENV
|
||||||
char envbuf[50];
|
char envbuf[50];
|
||||||
@ -4169,7 +4173,9 @@ set_child_environment(long rows, long columns, char *term)
|
|||||||
static char envbuf_Lines[20];
|
static char envbuf_Lines[20];
|
||||||
static char envbuf_Columns[20];
|
static char envbuf_Columns[20];
|
||||||
static char envbuf_Colors[20];
|
static char envbuf_Colors[20];
|
||||||
|
# ifdef FEAT_TERMINAL
|
||||||
static char envbuf_Version[20];
|
static char envbuf_Version[20];
|
||||||
|
# endif
|
||||||
# ifdef FEAT_CLIENTSERVER
|
# ifdef FEAT_CLIENTSERVER
|
||||||
static char envbuf_Servername[60];
|
static char envbuf_Servername[60];
|
||||||
# endif
|
# endif
|
||||||
@ -4190,8 +4196,13 @@ set_child_environment(long rows, long columns, char *term)
|
|||||||
setenv("COLUMNS", (char *)envbuf, 1);
|
setenv("COLUMNS", (char *)envbuf, 1);
|
||||||
sprintf((char *)envbuf, "%ld", colors);
|
sprintf((char *)envbuf, "%ld", colors);
|
||||||
setenv("COLORS", (char *)envbuf, 1);
|
setenv("COLORS", (char *)envbuf, 1);
|
||||||
sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION));
|
# ifdef FEAT_TERMINAL
|
||||||
setenv("VIM_TERMINAL", (char *)envbuf, 1);
|
if (is_terminal)
|
||||||
|
{
|
||||||
|
sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION));
|
||||||
|
setenv("VIM_TERMINAL", (char *)envbuf, 1);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
# ifdef FEAT_CLIENTSERVER
|
# ifdef FEAT_CLIENTSERVER
|
||||||
setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1);
|
setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1);
|
||||||
# endif
|
# endif
|
||||||
@ -4212,9 +4223,14 @@ set_child_environment(long rows, long columns, char *term)
|
|||||||
putenv(envbuf_Columns);
|
putenv(envbuf_Columns);
|
||||||
vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors);
|
vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors);
|
||||||
putenv(envbuf_Colors);
|
putenv(envbuf_Colors);
|
||||||
vim_snprintf(envbuf_Version, sizeof(envbuf_Version), "VIM_TERMINAL=%ld",
|
# ifdef FEAT_TERMINAL
|
||||||
get_vim_var_nr(VV_VERSION));
|
if (is_terminal)
|
||||||
putenv(envbuf_Version);
|
{
|
||||||
|
vim_snprintf(envbuf_Version, sizeof(envbuf_Version),
|
||||||
|
"VIM_TERMINAL=%ld", get_vim_var_nr(VV_VERSION));
|
||||||
|
putenv(envbuf_Version);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
# ifdef FEAT_CLIENTSERVER
|
# ifdef FEAT_CLIENTSERVER
|
||||||
vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername),
|
vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername),
|
||||||
"VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName);
|
"VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName);
|
||||||
@ -4224,9 +4240,9 @@ set_child_environment(long rows, long columns, char *term)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_default_child_environment(void)
|
set_default_child_environment(int is_terminal)
|
||||||
{
|
{
|
||||||
set_child_environment(Rows, Columns, "dumb");
|
set_child_environment(Rows, Columns, "dumb", is_terminal);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -4689,7 +4705,7 @@ mch_call_shell_fork(
|
|||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
set_default_child_environment();
|
set_default_child_environment(FALSE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* stderr is only redirected when using the GUI, so that a
|
* stderr is only redirected when using the GUI, so that a
|
||||||
@ -5367,7 +5383,7 @@ mch_call_shell(
|
|||||||
|
|
||||||
#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
|
#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
|
||||||
void
|
void
|
||||||
mch_job_start(char **argv, job_T *job, jobopt_T *options)
|
mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal)
|
||||||
{
|
{
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
int fd_in[2] = {-1, -1}; /* for stdin */
|
int fd_in[2] = {-1, -1}; /* for stdin */
|
||||||
@ -5515,11 +5531,12 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options)
|
|||||||
set_child_environment(
|
set_child_environment(
|
||||||
(long)options->jo_term_rows,
|
(long)options->jo_term_rows,
|
||||||
(long)options->jo_term_cols,
|
(long)options->jo_term_cols,
|
||||||
term);
|
term,
|
||||||
|
is_terminal);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
# endif
|
# endif
|
||||||
set_default_child_environment();
|
set_default_child_environment(is_terminal);
|
||||||
|
|
||||||
if (options->jo_env != NULL)
|
if (options->jo_env != NULL)
|
||||||
{
|
{
|
||||||
|
@ -5275,26 +5275,31 @@ win32_build_env(dict_T *env, garray_T *gap, int is_terminal)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_terminal)
|
# if defined(FEAT_CLIENTSERVER) || defined(FEAT_TERMINAL)
|
||||||
{
|
{
|
||||||
# ifdef FEAT_CLIENTSERVER
|
# ifdef FEAT_CLIENTSERVER
|
||||||
char_u *servername = get_vim_var_str(VV_SEND_SERVER);
|
char_u *servername = get_vim_var_str(VV_SEND_SERVER);
|
||||||
size_t servername_len = STRLEN(servername);
|
size_t servername_len = STRLEN(servername);
|
||||||
# endif
|
# endif
|
||||||
|
# ifdef FEAT_TERMINAL
|
||||||
char_u *version = get_vim_var_str(VV_VERSION);
|
char_u *version = get_vim_var_str(VV_VERSION);
|
||||||
size_t version_len = STRLEN(version);
|
size_t version_len = STRLEN(version);
|
||||||
|
# endif
|
||||||
// size of "VIM_SERVERNAME=" and value,
|
// size of "VIM_SERVERNAME=" and value,
|
||||||
// plus "VIM_TERMINAL=" and value,
|
// plus "VIM_TERMINAL=" and value,
|
||||||
// plus two terminating NULs
|
// plus two terminating NULs
|
||||||
size_t n = 0
|
size_t n = 0
|
||||||
# ifdef FEAT_CLIENTSERVER
|
# ifdef FEAT_CLIENTSERVER
|
||||||
+ 15 + servername_len
|
+ 15 + servername_len
|
||||||
# endif
|
# endif
|
||||||
+ 13 + version_len + 2;
|
# ifdef FEAT_TERMINAL
|
||||||
|
+ 13 + version_len + 2
|
||||||
|
# endif
|
||||||
|
;
|
||||||
|
|
||||||
if (ga_grow(gap, (int)n) == OK)
|
if (ga_grow(gap, (int)n) == OK)
|
||||||
{
|
{
|
||||||
# ifdef FEAT_CLIENTSERVER
|
# ifdef FEAT_CLIENTSERVER
|
||||||
for (n = 0; n < 15; n++)
|
for (n = 0; n < 15; n++)
|
||||||
*((WCHAR*)gap->ga_data + gap->ga_len++) =
|
*((WCHAR*)gap->ga_data + gap->ga_len++) =
|
||||||
(WCHAR)"VIM_SERVERNAME="[n];
|
(WCHAR)"VIM_SERVERNAME="[n];
|
||||||
@ -5302,14 +5307,19 @@ win32_build_env(dict_T *env, garray_T *gap, int is_terminal)
|
|||||||
*((WCHAR*)gap->ga_data + gap->ga_len++) =
|
*((WCHAR*)gap->ga_data + gap->ga_len++) =
|
||||||
(WCHAR)servername[n];
|
(WCHAR)servername[n];
|
||||||
*((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
|
*((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
|
||||||
# endif
|
# endif
|
||||||
for (n = 0; n < 13; n++)
|
# ifdef FEAT_TERMINAL
|
||||||
*((WCHAR*)gap->ga_data + gap->ga_len++) =
|
if (is_terminal)
|
||||||
(WCHAR)"VIM_TERMINAL="[n];
|
{
|
||||||
for (n = 0; n < version_len; n++)
|
for (n = 0; n < 13; n++)
|
||||||
*((WCHAR*)gap->ga_data + gap->ga_len++) =
|
*((WCHAR*)gap->ga_data + gap->ga_len++) =
|
||||||
(WCHAR)version[n];
|
(WCHAR)"VIM_TERMINAL="[n];
|
||||||
*((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
|
for (n = 0; n < version_len; n++)
|
||||||
|
*((WCHAR*)gap->ga_data + gap->ga_len++) =
|
||||||
|
(WCHAR)version[n];
|
||||||
|
*((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
|
||||||
|
}
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ void job_set_options(job_T *job, jobopt_T *opt);
|
|||||||
void job_stop_on_exit(void);
|
void job_stop_on_exit(void);
|
||||||
int has_pending_job(void);
|
int has_pending_job(void);
|
||||||
void job_check_ended(void);
|
void job_check_ended(void);
|
||||||
job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg);
|
job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg, int is_terminal);
|
||||||
char *job_status(job_T *job);
|
char *job_status(job_T *job);
|
||||||
void job_info(job_T *job, dict_T *dict);
|
void job_info(job_T *job, dict_T *dict);
|
||||||
void job_info_all(list_T *l);
|
void job_info_all(list_T *l);
|
||||||
|
@ -62,7 +62,7 @@ void mch_set_shellsize(void);
|
|||||||
void mch_new_shellsize(void);
|
void mch_new_shellsize(void);
|
||||||
void may_send_sigint(int c, pid_t pid, pid_t wpid);
|
void may_send_sigint(int c, pid_t pid, pid_t wpid);
|
||||||
int mch_call_shell(char_u *cmd, int options);
|
int mch_call_shell(char_u *cmd, int options);
|
||||||
void mch_job_start(char **argv, job_T *job, jobopt_T *options);
|
void mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal);
|
||||||
char *mch_job_status(job_T *job);
|
char *mch_job_status(job_T *job);
|
||||||
job_T *mch_detect_ended_job(job_T *job_list);
|
job_T *mch_detect_ended_job(job_T *job_list);
|
||||||
int mch_signal_job(job_T *job, char_u *how);
|
int mch_signal_job(job_T *job, char_u *how);
|
||||||
|
@ -5769,7 +5769,7 @@ term_and_job_init(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This may change a string in "argvar". */
|
/* This may change a string in "argvar". */
|
||||||
term->tl_job = job_start(argvar, argv, opt);
|
term->tl_job = job_start(argvar, argv, opt, TRUE);
|
||||||
if (term->tl_job != NULL)
|
if (term->tl_job != NULL)
|
||||||
++term->tl_job->jv_refcount;
|
++term->tl_job->jv_refcount;
|
||||||
|
|
||||||
|
@ -761,6 +761,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
50,
|
||||||
/**/
|
/**/
|
||||||
49,
|
49,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user