changeset 11951:e8b1ef40324a v8.0.0855

patch 8.0.0855: MS-Windows: can't get tty name of terminal commit https://github.com/vim/vim/commit/5be8dd087f36affa492ef6049fa813b376210543 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Aug 3 20:52:19 2017 +0200 patch 8.0.0855: MS-Windows: can't get tty name of terminal Problem: MS-Windows: can't get tty name of terminal. Solution: Use the winpty process number. (Yasuhiro Matsumoto, closes https://github.com/vim/vim/issues/1929)
author Christian Brabandt <cb@256bit.org>
date Thu, 03 Aug 2017 21:00:04 +0200
parents 8729bfabc668
children 0456b0b03cdb
files src/terminal.c src/testdir/test_terminal.vim src/version.c
diffstat 3 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -2201,6 +2201,7 @@ void (*winpty_spawn_config_free)(void*);
 void (*winpty_error_free)(void*);
 LPCWSTR (*winpty_error_msg)(void*);
 BOOL (*winpty_set_size)(void*, int, int, void*);
+HANDLE (*winpty_agent_process)(void*);
 
 #define WINPTY_DLL "winpty.dll"
 
@@ -2230,6 +2231,7 @@ dyn_winpty_init(void)
 	{"winpty_spawn_config_new", (FARPROC*)&winpty_spawn_config_new},
 	{"winpty_error_msg", (FARPROC*)&winpty_error_msg},
 	{"winpty_set_size", (FARPROC*)&winpty_set_size},
+	{"winpty_agent_process", (FARPROC*)&winpty_agent_process},
 	{NULL, NULL}
     };
 
@@ -2272,6 +2274,7 @@ term_and_job_init(term_T *term, int rows
     HANDLE	    jo = NULL, child_process_handle, child_thread_handle;
     void	    *winpty_err;
     void	    *spawn_config = NULL;
+    char	    buf[MAX_PATH];
 
     if (!dyn_winpty_init())
 	return FAIL;
@@ -2358,6 +2361,9 @@ term_and_job_init(term_T *term, int rows
     job->jv_proc_info.dwProcessId = GetProcessId(child_process_handle);
     job->jv_job_object = jo;
     job->jv_status = JOB_STARTED;
+    sprintf(buf, "winpty://%lu",
+	    GetProcessId(winpty_agent_process(term->tl_winpty)));
+    job->jv_tty_name = vim_strsave((char_u*)buf);
     ++job->jv_refcount;
     term->tl_job = job;
 
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -34,7 +34,8 @@ func Test_terminal_basic()
     call assert_match("^/dev/", job_info(g:job).tty)
     call assert_match("^/dev/", term_gettty(''))
   else
-    call assert_equal("", job_info(g:job).tty)
+    call assert_match("^winpty://", job_info(g:job).tty)
+    call assert_match("^winpty://", term_gettty(''))
   endif
   call Stop_shell_in_terminal(buf)
   call term_wait(buf)
--- 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 */
 /**/
+    855,
+/**/
     854,
 /**/
     853,