# HG changeset patch # User Christian Brabandt # Date 1503250204 -7200 # Node ID 53987de2115ddedbbb406935d60130b855e789c3 # Parent 5abe784eb50001dd834554167b457c5db7ef537a 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 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. diff --git a/src/terminal.c b/src/terminal.c --- 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) diff --git a/src/version.c b/src/version.c --- 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,