Mercurial > vim
comparison src/os_win32.c @ 8047:7c74cafac0a1 v7.4.1318
commit https://github.com/vim/vim/commit/7b3ca76a451b10d238ef946f3231762e0bd988e9
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Feb 14 19:13:43 2016 +0100
patch 7.4.1318
Problem: Channel with pipes doesn't work in GUI.
Solution: Register input handlers for pipes.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 14 Feb 2016 19:15:09 +0100 |
parents | 75e0831549f1 |
children | 15253130abd8 |
comparison
equal
deleted
inserted
replaced
8046:759a0d82475e | 8047:7c74cafac0a1 |
---|---|
5037 mch_start_job(char *cmd, job_T *job) | 5037 mch_start_job(char *cmd, job_T *job) |
5038 { | 5038 { |
5039 STARTUPINFO si; | 5039 STARTUPINFO si; |
5040 PROCESS_INFORMATION pi; | 5040 PROCESS_INFORMATION pi; |
5041 HANDLE jo; | 5041 HANDLE jo; |
5042 #ifdef FEAT_CHANNEL | |
5043 channel_T *channel; | |
5044 | |
5045 channel = add_channel(); | |
5046 if (channel == NULL) | |
5047 return; | |
5048 #endif | |
5042 | 5049 |
5043 jo = CreateJobObject(NULL, NULL); | 5050 jo = CreateJobObject(NULL, NULL); |
5044 if (jo == NULL) | 5051 if (jo == NULL) |
5045 { | 5052 { |
5046 job->jv_status = JOB_FAILED; | 5053 job->jv_status = JOB_FAILED; |
5047 return; | 5054 goto failed; |
5048 } | 5055 } |
5049 | 5056 |
5050 ZeroMemory(&pi, sizeof(pi)); | 5057 ZeroMemory(&pi, sizeof(pi)); |
5051 ZeroMemory(&si, sizeof(si)); | 5058 ZeroMemory(&si, sizeof(si)); |
5052 si.cb = sizeof(si); | 5059 si.cb = sizeof(si); |
5060 CREATE_NEW_CONSOLE, | 5067 CREATE_NEW_CONSOLE, |
5061 &si, &pi)) | 5068 &si, &pi)) |
5062 { | 5069 { |
5063 CloseHandle(jo); | 5070 CloseHandle(jo); |
5064 job->jv_status = JOB_FAILED; | 5071 job->jv_status = JOB_FAILED; |
5065 } | 5072 goto failed; |
5066 else | 5073 } |
5067 { | 5074 |
5068 if (!AssignProcessToJobObject(jo, pi.hProcess)) | 5075 if (!AssignProcessToJobObject(jo, pi.hProcess)) |
5069 { | 5076 { |
5070 /* if failing, switch the way to terminate | 5077 /* if failing, switch the way to terminate |
5071 * process with TerminateProcess. */ | 5078 * process with TerminateProcess. */ |
5072 CloseHandle(jo); | 5079 CloseHandle(jo); |
5073 jo = NULL; | 5080 jo = NULL; |
5074 } | 5081 } |
5075 ResumeThread(pi.hThread); | 5082 ResumeThread(pi.hThread); |
5076 CloseHandle(job->jv_proc_info.hThread); | 5083 CloseHandle(job->jv_proc_info.hThread); |
5077 job->jv_proc_info = pi; | 5084 job->jv_proc_info = pi; |
5078 job->jv_job_object = jo; | 5085 job->jv_job_object = jo; |
5079 job->jv_status = JOB_STARTED; | 5086 job->jv_status = JOB_STARTED; |
5080 } | 5087 |
5088 #ifdef FEAT_CHANNEL | |
5089 # if 0 | |
5090 /* TODO: connect stdin/stdout/stderr */ | |
5091 job->jv_channel = channel; | |
5092 channel_set_pipes(channel, fd_in[1], fd_out[0], fd_err[0]); | |
5093 channel_set_job(channel, job); | |
5094 | |
5095 # ifdef FEAT_GUI | |
5096 channel_gui_register(channel); | |
5097 # endif | |
5098 # endif | |
5099 #endif | |
5100 return; | |
5101 | |
5102 failed: | |
5103 #ifdef FEAT_CHANNEL | |
5104 channel_free(channel); | |
5105 #endif | |
5081 } | 5106 } |
5082 | 5107 |
5083 char * | 5108 char * |
5084 mch_job_status(job_T *job) | 5109 mch_job_status(job_T *job) |
5085 { | 5110 { |