changeset 12194:53987de2115d v8.0.0977

patch 8.0.0977: cannot send lines to a terminal job on MS-Windows commit https://github.com/vim/vim/commit/5983d5024711f078e7261264cb0e7d6e57953968 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Aug 20 19:22:56 2017 +0200 patch 8.0.0977: cannot send lines to a terminal job on MS-Windows Problem: Cannot send lines to a terminal job on MS-Windows. Solution: Set jv_in_buf. Command doesn't get EOF yet though.
author Christian Brabandt <cb@256bit.org>
date Sun, 20 Aug 2017 19:30:04 +0200
parents 5abe784eb500
children 2d911fe7acdc
files src/terminal.c src/version.c
diffstat 2 files changed, 20 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -2869,11 +2869,13 @@ term_and_job_init(
 	typval_T    *argvar,
 	jobopt_T    *opt)
 {
-    WCHAR	    *p = NULL;
+    WCHAR	    *cmd_wchar = NULL;
     channel_T	    *channel = NULL;
     job_T	    *job = NULL;
     DWORD	    error;
-    HANDLE	    jo = NULL, child_process_handle, child_thread_handle;
+    HANDLE	    jo = NULL;
+    HANDLE	    child_process_handle;
+    HANDLE	    child_thread_handle;
     void	    *winpty_err;
     void	    *spawn_config = NULL;
     char	    buf[MAX_PATH];
@@ -2893,8 +2895,8 @@ term_and_job_init(
 	cmd = ga.ga_data;
     }
 
-    p = enc_to_utf16(cmd, NULL);
-    if (p == NULL)
+    cmd_wchar = enc_to_utf16(cmd, NULL);
+    if (cmd_wchar == NULL)
 	return FAIL;
 
     job = job_alloc();
@@ -2919,7 +2921,7 @@ term_and_job_init(
 	    WINPTY_SPAWN_FLAG_AUTO_SHUTDOWN |
 		WINPTY_SPAWN_FLAG_EXIT_AFTER_SHUTDOWN,
 	    NULL,
-	    p,
+	    cmd_wchar,
 	    NULL,
 	    NULL,
 	    &winpty_err);
@@ -2934,20 +2936,25 @@ term_and_job_init(
     if (job == NULL)
 	goto failed;
 
+    /* TODO: when all lines are written and the fd is closed, the command
+     * doesn't get EOF and hangs. */
+    if (opt->jo_set & JO_IN_BUF)
+	job->jv_in_buf = buflist_findnr(opt->jo_io_buf[PART_IN]);
+
     if (!winpty_spawn(term->tl_winpty, spawn_config, &child_process_handle,
 	    &child_thread_handle, &error, &winpty_err))
 	goto failed;
 
     channel_set_pipes(channel,
-	(sock_T) CreateFileW(
+	(sock_T)CreateFileW(
 	    winpty_conin_name(term->tl_winpty),
 	    GENERIC_WRITE, 0, NULL,
 	    OPEN_EXISTING, 0, NULL),
-	(sock_T) CreateFileW(
+	(sock_T)CreateFileW(
 	    winpty_conout_name(term->tl_winpty),
 	    GENERIC_READ, 0, NULL,
 	    OPEN_EXISTING, 0, NULL),
-	(sock_T) CreateFileW(
+	(sock_T)CreateFileW(
 	    winpty_conerr_name(term->tl_winpty),
 	    GENERIC_READ, 0, NULL,
 	    OPEN_EXISTING, 0, NULL));
@@ -2964,7 +2971,7 @@ term_and_job_init(
     }
 
     winpty_spawn_config_free(spawn_config);
-    vim_free(p);
+    vim_free(cmd_wchar);
 
     create_vterm(term, rows, cols);
 
@@ -2987,8 +2994,8 @@ term_and_job_init(
 failed:
     if (argvar->v_type == VAR_LIST)
 	vim_free(ga.ga_data);
-    if (p != NULL)
-	vim_free(p);
+    if (cmd_wchar != NULL)
+	vim_free(cmd_wchar);
     if (spawn_config != NULL)
 	winpty_spawn_config_free(spawn_config);
     if (channel != NULL)
--- 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 */
 /**/
+    977,
+/**/
     976,
 /**/
     975,