Patch 8.1.0049
Problem:    Shell cannot tell running in a terminal window.
Solution:   Add the VIM_TERMINAL environment variable. (Christian Brabandt)
Files:      runtime/doc/terminal.txt, src/os_unix.c, src/os_win32.c,
            src/testdir/test_terminal.vim


*** ../vim-8.1.0048/runtime/doc/terminal.txt    2018-05-17 14:49:10.000000000 
+0200
--- runtime/doc/terminal.txt    2018-06-12 17:43:50.152692460 +0200
***************
*** 204,210 ****
                        ++rows={height} Use {height} for the terminal window
                                        height.  If the terminal uses the full
                                        Vim height (no window above or below
!                                       th terminal window) the command line
                                        height will be reduced as needed.
                        ++cols={width}  Use {width} for the terminal window
                                        width. If the terminal uses the full
--- 204,210 ----
                        ++rows={height} Use {height} for the terminal window
                                        height.  If the terminal uses the full
                                        Vim height (no window above or below
!                                       the terminal window) the command line
                                        height will be reduced as needed.
                        ++cols={width}  Use {width} for the terminal window
                                        width. If the terminal uses the full
***************
*** 243,249 ****
  You can use `CTRL-W :hide` to close the terminal window and make the buffer
  hidden, the job keeps running.  The `:buffer` command can be used to turn the
  current window into a terminal window.  If there are unsaved changes this
! fails, use !  to force, as usual.
  
  To have a background job run without a window, and open the window when it's
  done, use options like this: >
--- 243,249 ----
  You can use `CTRL-W :hide` to close the terminal window and make the buffer
  hidden, the job keeps running.  The `:buffer` command can be used to turn the
  current window into a terminal window.  If there are unsaved changes this
! fails, use ! to force, as usual.
  
  To have a background job run without a window, and open the window when it's
  done, use options like this: >
***************
*** 376,381 ****
--- 376,382 ----
      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 ~
*** ../vim-8.1.0048/src/os_unix.c       2018-05-12 17:42:33.000000000 +0200
--- src/os_unix.c       2018-06-12 17:58:42.928059243 +0200
***************
*** 4169,4174 ****
--- 4169,4175 ----
      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,4194 ****
--- 4190,4197 ----
      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,4214 ****
--- 4212,4220 ----
      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);
*** ../vim-8.1.0048/src/os_win32.c      2018-05-06 17:05:39.000000000 +0200
--- src/os_win32.c      2018-06-12 18:00:28.031513685 +0200
***************
*** 5275,5299 ****
        }
      }
  
- # ifdef FEAT_CLIENTSERVER
      if (is_terminal)
      {
        char_u  *servername = get_vim_var_str(VV_SEND_SERVER);
!       size_t  lval = STRLEN(servername);
!       size_t  n;
  
!       if (ga_grow(gap, (int)(14 + lval + 2)) == OK)
        {
            for (n = 0; n < 15; n++)
                *((WCHAR*)gap->ga_data + gap->ga_len++) =
                    (WCHAR)"VIM_SERVERNAME="[n];
!           for (n = 0; n < lval; n++)
                *((WCHAR*)gap->ga_data + gap->ga_len++) =
                    (WCHAR)servername[n];
            *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
        }
      }
- # endif
  }
  
      void
--- 5275,5317 ----
        }
      }
  
      if (is_terminal)
      {
+ # ifdef FEAT_CLIENTSERVER
        char_u  *servername = get_vim_var_str(VV_SEND_SERVER);
!       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)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 < 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';
        }
      }
  }
  
      void
*** ../vim-8.1.0048/src/testdir/test_terminal.vim       2018-06-03 
18:21:57.809890160 +0200
--- src/testdir/test_terminal.vim       2018-06-12 18:01:49.195092385 +0200
***************
*** 482,499 ****
    if !has('clientserver')
      return
    endif
    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")
    else
!     call term_sendkeys(buf, "echo $VIM_SERVERNAME\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))
  
    exe buf . 'bwipe'
    unlet buf
--- 482,506 ----
    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 %" . a:name . "%\r")
    else
!     call term_sendkeys(buf, "echo $" . a:name . "\r")
    endif
    call term_wait(buf)
    call Stop_shell_in_terminal(buf)
!   call WaitForAssert({-> assert_equal(a:value, getline(2))})
  
    exe buf . 'bwipe'
    unlet buf
*** ../vim-8.1.0048/src/version.c       2018-06-12 17:25:32.054404315 +0200
--- src/version.c       2018-06-12 18:03:17.778632563 +0200
***************
*** 763,764 ****
--- 763,766 ----
  {   /* Add new patch number below this line */
+ /**/
+     49,
  /**/

-- 
On the other hand, you have different fingers.
                                      -- Steven Wright

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui