Skip to content

Commit 493359e

Browse files
committed
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.
1 parent d7a137f commit 493359e

8 files changed

Lines changed: 66 additions & 33 deletions

File tree

src/channel.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5525,7 +5525,11 @@ job_check_ended(void)
55255525
* Returns NULL when out of memory.
55265526
*/
55275527
job_T *
5528-
job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg)
5528+
job_start(
5529+
typval_T *argvars,
5530+
char **argv_arg,
5531+
jobopt_T *opt_arg,
5532+
int is_terminal UNUSED)
55295533
{
55305534
job_T *job;
55315535
char_u *cmd = NULL;
@@ -5679,7 +5683,7 @@ job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg)
56795683
ch_log(NULL, "Starting job: %s", (char *)ga.ga_data);
56805684
ga_clear(&ga);
56815685
}
5682-
mch_job_start(argv, job, &opt);
5686+
mch_job_start(argv, job, &opt, is_terminal);
56835687
#else
56845688
ch_log(NULL, "Starting job: %s", (char *)cmd);
56855689
mch_job_start((char *)cmd, job, &opt);

src/evalfunc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7254,7 +7254,7 @@ f_job_start(typval_T *argvars, typval_T *rettv)
72547254
rettv->v_type = VAR_JOB;
72557255
if (check_restricted() || check_secure())
72567256
return;
7257-
rettv->vval.v_job = job_start(argvars, NULL, NULL);
7257+
rettv->vval.v_job = job_start(argvars, NULL, NULL, FALSE);
72587258
}
72597259

72607260
/*

src/os_unix.c

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4159,7 +4159,11 @@ wait4pid(pid_t child, waitstatus *status)
41594159
* Set the environment for a child process.
41604160
*/
41614161
static void
4162-
set_child_environment(long rows, long columns, char *term)
4162+
set_child_environment(
4163+
long rows,
4164+
long columns,
4165+
char *term,
4166+
int is_terminal UNUSED)
41634167
{
41644168
# ifdef HAVE_SETENV
41654169
char envbuf[50];
@@ -4169,7 +4173,9 @@ set_child_environment(long rows, long columns, char *term)
41694173
static char envbuf_Lines[20];
41704174
static char envbuf_Columns[20];
41714175
static char envbuf_Colors[20];
4176+
# ifdef FEAT_TERMINAL
41724177
static char envbuf_Version[20];
4178+
# endif
41734179
# ifdef FEAT_CLIENTSERVER
41744180
static char envbuf_Servername[60];
41754181
# endif
@@ -4190,8 +4196,13 @@ set_child_environment(long rows, long columns, char *term)
41904196
setenv("COLUMNS", (char *)envbuf, 1);
41914197
sprintf((char *)envbuf, "%ld", colors);
41924198
setenv("COLORS", (char *)envbuf, 1);
4193-
sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION));
4194-
setenv("VIM_TERMINAL", (char *)envbuf, 1);
4199+
# ifdef FEAT_TERMINAL
4200+
if (is_terminal)
4201+
{
4202+
sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION));
4203+
setenv("VIM_TERMINAL", (char *)envbuf, 1);
4204+
}
4205+
# endif
41954206
# ifdef FEAT_CLIENTSERVER
41964207
setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1);
41974208
# endif
@@ -4212,9 +4223,14 @@ set_child_environment(long rows, long columns, char *term)
42124223
putenv(envbuf_Columns);
42134224
vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors);
42144225
putenv(envbuf_Colors);
4215-
vim_snprintf(envbuf_Version, sizeof(envbuf_Version), "VIM_TERMINAL=%ld",
4216-
get_vim_var_nr(VV_VERSION));
4217-
putenv(envbuf_Version);
4226+
# ifdef FEAT_TERMINAL
4227+
if (is_terminal)
4228+
{
4229+
vim_snprintf(envbuf_Version, sizeof(envbuf_Version),
4230+
"VIM_TERMINAL=%ld", get_vim_var_nr(VV_VERSION));
4231+
putenv(envbuf_Version);
4232+
}
4233+
# endif
42184234
# ifdef FEAT_CLIENTSERVER
42194235
vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername),
42204236
"VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName);
@@ -4224,9 +4240,9 @@ set_child_environment(long rows, long columns, char *term)
42244240
}
42254241

42264242
static void
4227-
set_default_child_environment(void)
4243+
set_default_child_environment(int is_terminal)
42284244
{
4229-
set_child_environment(Rows, Columns, "dumb");
4245+
set_child_environment(Rows, Columns, "dumb", is_terminal);
42304246
}
42314247
#endif
42324248

@@ -4689,7 +4705,7 @@ mch_call_shell_fork(
46894705
# endif
46904706
}
46914707
# endif
4692-
set_default_child_environment();
4708+
set_default_child_environment(FALSE);
46934709

46944710
/*
46954711
* stderr is only redirected when using the GUI, so that a
@@ -5367,7 +5383,7 @@ mch_call_shell(
53675383

53685384
#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
53695385
void
5370-
mch_job_start(char **argv, job_T *job, jobopt_T *options)
5386+
mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal)
53715387
{
53725388
pid_t pid;
53735389
int fd_in[2] = {-1, -1}; /* for stdin */
@@ -5515,11 +5531,12 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options)
55155531
set_child_environment(
55165532
(long)options->jo_term_rows,
55175533
(long)options->jo_term_cols,
5518-
term);
5534+
term,
5535+
is_terminal);
55195536
}
55205537
else
55215538
# endif
5522-
set_default_child_environment();
5539+
set_default_child_environment(is_terminal);
55235540

55245541
if (options->jo_env != NULL)
55255542
{

src/os_win32.c

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5275,41 +5275,51 @@ win32_build_env(dict_T *env, garray_T *gap, int is_terminal)
52755275
}
52765276
}
52775277

5278-
if (is_terminal)
5278+
# if defined(FEAT_CLIENTSERVER) || defined(FEAT_TERMINAL)
52795279
{
5280-
# ifdef FEAT_CLIENTSERVER
5280+
# ifdef FEAT_CLIENTSERVER
52815281
char_u *servername = get_vim_var_str(VV_SEND_SERVER);
52825282
size_t servername_len = STRLEN(servername);
5283-
# endif
5283+
# endif
5284+
# ifdef FEAT_TERMINAL
52845285
char_u *version = get_vim_var_str(VV_VERSION);
52855286
size_t version_len = STRLEN(version);
5287+
# endif
52865288
// size of "VIM_SERVERNAME=" and value,
52875289
// plus "VIM_TERMINAL=" and value,
52885290
// plus two terminating NULs
52895291
size_t n = 0
5290-
# ifdef FEAT_CLIENTSERVER
5292+
# ifdef FEAT_CLIENTSERVER
52915293
+ 15 + servername_len
5292-
# endif
5293-
+ 13 + version_len + 2;
5294+
# endif
5295+
# ifdef FEAT_TERMINAL
5296+
+ 13 + version_len + 2
5297+
# endif
5298+
;
52945299

52955300
if (ga_grow(gap, (int)n) == OK)
52965301
{
5297-
# ifdef FEAT_CLIENTSERVER
5302+
# ifdef FEAT_CLIENTSERVER
52985303
for (n = 0; n < 15; n++)
52995304
*((WCHAR*)gap->ga_data + gap->ga_len++) =
53005305
(WCHAR)"VIM_SERVERNAME="[n];
53015306
for (n = 0; n < servername_len; n++)
53025307
*((WCHAR*)gap->ga_data + gap->ga_len++) =
53035308
(WCHAR)servername[n];
53045309
*((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
5305-
# endif
5306-
for (n = 0; n < 13; n++)
5307-
*((WCHAR*)gap->ga_data + gap->ga_len++) =
5308-
(WCHAR)"VIM_TERMINAL="[n];
5309-
for (n = 0; n < version_len; n++)
5310-
*((WCHAR*)gap->ga_data + gap->ga_len++) =
5311-
(WCHAR)version[n];
5312-
*((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
5310+
# endif
5311+
# ifdef FEAT_TERMINAL
5312+
if (is_terminal)
5313+
{
5314+
for (n = 0; n < 13; n++)
5315+
*((WCHAR*)gap->ga_data + gap->ga_len++) =
5316+
(WCHAR)"VIM_TERMINAL="[n];
5317+
for (n = 0; n < version_len; n++)
5318+
*((WCHAR*)gap->ga_data + gap->ga_len++) =
5319+
(WCHAR)version[n];
5320+
*((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
5321+
}
5322+
# endif
53135323
}
53145324
}
53155325
}

src/proto/channel.pro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void job_set_options(job_T *job, jobopt_T *opt);
6666
void job_stop_on_exit(void);
6767
int has_pending_job(void);
6868
void job_check_ended(void);
69-
job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg);
69+
job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg, int is_terminal);
7070
char *job_status(job_T *job);
7171
void job_info(job_T *job, dict_T *dict);
7272
void job_info_all(list_T *l);

src/proto/os_unix.pro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void mch_set_shellsize(void);
6262
void mch_new_shellsize(void);
6363
void may_send_sigint(int c, pid_t pid, pid_t wpid);
6464
int mch_call_shell(char_u *cmd, int options);
65-
void mch_job_start(char **argv, job_T *job, jobopt_T *options);
65+
void mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal);
6666
char *mch_job_status(job_T *job);
6767
job_T *mch_detect_ended_job(job_T *job_list);
6868
int mch_signal_job(job_T *job, char_u *how);

src/terminal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5769,7 +5769,7 @@ term_and_job_init(
57695769
#endif
57705770

57715771
/* This may change a string in "argvar". */
5772-
term->tl_job = job_start(argvar, argv, opt);
5772+
term->tl_job = job_start(argvar, argv, opt, TRUE);
57735773
if (term->tl_job != NULL)
57745774
++term->tl_job->jv_refcount;
57755775

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,8 @@ static char *(features[]) =
761761

762762
static int included_patches[] =
763763
{ /* Add new patch number below this line */
764+
/**/
765+
50,
764766
/**/
765767
49,
766768
/**/

0 commit comments

Comments
 (0)