summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-06-12 18:05:24 +0200
committerBram Moolenaar <Bram@vim.org>2018-06-12 18:05:24 +0200
commitd7a137fb0d980545dd567bee9c24cf7b9c3a2eae (patch)
treecc2884017b1e6e84213aa458a8fd28560de2ab24
parent07ccf7ce7fb948fd4d080b817e9fbaea9e721dab (diff)
patch 8.1.0049: shell cannot tell running in a terminal windowv8.1.0049
Problem: Shell cannot tell running in a terminal window. Solution: Add the VIM_TERMINAL environment variable. (Christian Brabandt)
-rw-r--r--runtime/doc/terminal.txt1
-rw-r--r--src/os_unix.c6
-rw-r--r--src/os_win32.c30
-rw-r--r--src/testdir/test_terminal.vim15
-rw-r--r--src/version.c2
5 files changed, 44 insertions, 10 deletions
diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt
index b3fe522864..e4cca34438 100644
--- a/runtime/doc/terminal.txt
+++ b/runtime/doc/terminal.txt
@@ -376,6 +376,7 @@ Environment variables are used to pass information to the running job:
COLUMNS number of columns in the terminal initially
COLORS number of colors, 't_Co' (256*256*256 in the GUI)
VIM_SERVERNAME v:servername
+ VIM_TERMINAL v:version
MS-Windows ~
diff --git a/src/os_unix.c b/src/os_unix.c
index 1609bb8e2d..a9fb3b51c8 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -4169,6 +4169,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_Version[20];
# ifdef FEAT_CLIENTSERVER
static char envbuf_Servername[60];
# endif
@@ -4189,6 +4190,8 @@ set_child_environment(long rows, long columns, char *term)
setenv("COLUMNS", (char *)envbuf, 1);
sprintf((char *)envbuf, "%ld", colors);
setenv("COLORS", (char *)envbuf, 1);
+ sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION));
+ setenv("VIM_TERMINAL", (char *)envbuf, 1);
# ifdef FEAT_CLIENTSERVER
setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1);
# endif
@@ -4209,6 +4212,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_Version, sizeof(envbuf_Version), "VIM_TERMINAL=%ld",
+ get_vim_var_nr(VV_VERSION));
+ putenv(envbuf_Version);
# ifdef FEAT_CLIENTSERVER
vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername),
"VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName);
diff --git a/src/os_win32.c b/src/os_win32.c
index 602ef8aa21..3b0291e9b1 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -5275,25 +5275,43 @@ win32_build_env(dict_T *env, garray_T *gap, int is_terminal)
}
}
-# ifdef FEAT_CLIENTSERVER
if (is_terminal)
{
+# ifdef FEAT_CLIENTSERVER
char_u *servername = get_vim_var_str(VV_SEND_SERVER);
- size_t lval = STRLEN(servername);
- size_t n;
+ size_t servername_len = STRLEN(servername);
+# endif
+ char_u *version = get_vim_var_str(VV_VERSION);
+ size_t version_len = STRLEN(version);
+ // size of "VIM_SERVERNAME=" and value,
+ // plus "VIM_TERMINAL=" and value,
+ // plus two terminating NULs
+ size_t n = 0
+# ifdef FEAT_CLIENTSERVER
+ + 15 + servername_len
+# endif
+ + 13 + version_len + 2;
- if (ga_grow(gap, (int)(14 + lval + 2)) == OK)
+ if (ga_grow(gap, (int)n) == OK)
{
+# ifdef FEAT_CLIENTSERVER
for (n = 0; n < 15; n++)
*((WCHAR*)gap->ga_data + gap->ga_len++) =
(WCHAR)"VIM_SERVERNAME="[n];
- for (n = 0; n < lval; n++)
+ for (n = 0; n < servername_len; n++)
*((WCHAR*)gap->ga_data + gap->ga_len++) =
(WCHAR)servername[n];
*((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
+# endif
+ for (n = 0; n < 13; n++)
+ *((WCHAR*)gap->ga_data + gap->ga_len++) =
+ (WCHAR)"VIM_TERMINAL="[n];
+ 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
}
void
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 3d06eb3876..c082b3b73e 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -482,18 +482,25 @@ func Test_terminal_servername()
if !has('clientserver')
return
endif
+ call s:test_environment("VIM_SERVERNAME", v:servername)
+endfunc
+
+func Test_terminal_version()
+ call s:test_environment("VIM_TERMINAL", string(v:version))
+endfunc
+
+func s:test_environment(name, value)
let buf = Run_shell_in_terminal({})
" Wait for the shell to display a prompt
call WaitForAssert({-> assert_notequal('', term_getline(buf, 1))})
if has('win32')
- call term_sendkeys(buf, "echo %VIM_SERVERNAME%\r")
+ call term_sendkeys(buf, "echo %" . a:name . "%\r")
else
- call term_sendkeys(buf, "echo $VIM_SERVERNAME\r")
+ call term_sendkeys(buf, "echo $" . a:name . "\r")
endif
call term_wait(buf)
call Stop_shell_in_terminal(buf)
- call WaitFor('getline(2) == v:servername')
- call assert_equal(v:servername, getline(2))
+ call WaitForAssert({-> assert_equal(a:value, getline(2))})
exe buf . 'bwipe'
unlet buf
diff --git a/src/version.c b/src/version.c
index fc68f8ef2e..770eea8f04 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 49,
+/**/
48,
/**/
47,