diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-06-12 18:05:24 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-06-12 18:05:24 +0200 |
commit | d7a137fb0d980545dd567bee9c24cf7b9c3a2eae (patch) | |
tree | cc2884017b1e6e84213aa458a8fd28560de2ab24 | |
parent | 07ccf7ce7fb948fd4d080b817e9fbaea9e721dab (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.txt | 1 | ||||
-rw-r--r-- | src/os_unix.c | 6 | ||||
-rw-r--r-- | src/os_win32.c | 30 | ||||
-rw-r--r-- | src/testdir/test_terminal.vim | 15 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |