summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-08-01 17:14:21 +0200
committerBram Moolenaar <Bram@vim.org>2017-08-01 17:14:21 +0200
commit7da346035bf5837e6f5b734c5469477d981730f8 (patch)
treefe4a49c9fe4b67ed64470bd94a21466935ded25a
parent983b3a5bc44a91cc7e40b8e71e3bfdb03dd4606f (diff)
patch 8.0.0829: job running in terminal can't communicate with Vimv8.0.0829
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)
-rw-r--r--src/os_unix.c10
-rw-r--r--src/version.c2
2 files changed, 11 insertions, 1 deletions
diff --git a/src/os_unix.c b/src/os_unix.c
index ff7661833f..668b930a1b 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 e7b9feed98..cd8a4cfa1e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 829,
+/**/
828,
/**/
827,