From 7da346035bf5837e6f5b734c5469477d981730f8 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar <Bram@vim.org> Date: Tue, 1 Aug 2017 17:14:21 +0200 Subject: [PATCH] patch 8.0.0829: job running in terminal can't communicate with Vim Problem: A job running in a terminal window cannot easily communicate with the Vim it is running in. Solution: Pass v:servername in an environment variable. (closes #1908) --- src/os_unix.c | 10 +++++++++- src/version.c | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/os_unix.c b/src/os_unix.c index ff7661833..668b930a1 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -4094,6 +4094,9 @@ mch_parse_cmd(char_u *cmd, int use_shcf, char ***argv, int *argc) #endif #if !defined(USE_SYSTEM) || defined(FEAT_JOB_CHANNEL) +/* + * Set the environment for a child process. + */ static void set_child_environment(long rows, long columns, char *term) { @@ -4105,6 +4108,7 @@ set_child_environment(long rows, long columns, char *term) static char envbuf_Lines[20]; static char envbuf_Columns[20]; static char envbuf_Colors[20]; + static char envbuf_Servername[60]; # endif long colors = # ifdef FEAT_GUI @@ -4112,7 +4116,6 @@ set_child_environment(long rows, long columns, char *term) # endif t_colors; - /* Simulate to have a dumb terminal (for now) */ # ifdef HAVE_SETENV setenv("TERM", term, 1); sprintf((char *)envbuf, "%ld", rows); @@ -4123,10 +4126,12 @@ set_child_environment(long rows, long columns, char *term) setenv("COLUMNS", (char *)envbuf, 1); sprintf((char *)envbuf, "%ld", colors); setenv("COLORS", (char *)envbuf, 1); + setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1); # else /* * Putenv does not copy the string, it has to remain valid. * Use a static array to avoid losing allocated memory. + * This won't work well when running multiple children... */ vim_snprintf(envbuf_Term, sizeof(envbuf_Term), "TERM=%s", term); putenv(envbuf_Term); @@ -4139,6 +4144,9 @@ set_child_environment(long rows, long columns, char *term) putenv(envbuf_Columns); vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors); putenv(envbuf_Colors); + vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername), + "VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName); + putenv(envbuf_Servername); # endif } diff --git a/src/version.c b/src/version.c index e7b9feed9..cd8a4cfa1 100644 --- a/src/version.c +++ b/src/version.c @@ -769,6 +769,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 829, /**/ 828, /**/ -- 2.40.0