Skip to content

Commit

Permalink
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Browse files Browse the repository at this point in the history
Problem:    Cannot send lines to a terminal job on MS-Windows.
Solution:   Set jv_in_buf.  Command doesn't get EOF yet though.
  • Loading branch information
brammool committed Aug 20, 2017
1 parent b241208 commit 5983d50
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 11 deletions.
29 changes: 18 additions & 11 deletions src/terminal.c
Expand Up @@ -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];
Expand All @@ -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();
Expand All @@ -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);
Expand All @@ -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));
Expand All @@ -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);

Expand All @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -769,6 +769,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
977,
/**/
976,
/**/
Expand Down

0 comments on commit 5983d50

Please sign in to comment.