Problem: The job feature isn't available on MS-Windows.
Solution: Add the job feature. Fix argument of job_stop(). (Yasuhiro
Matsumoto)
#ifdef FEAT_JOB
{"job_start", 1, 2, f_job_start},
{"job_status", 1, 1, f_job_status},
- {"job_stop", 1, 1, f_job_stop},
+ {"job_stop", 1, 2, f_job_stop},
#endif
{"join", 1, 2, f_join},
{"jsdecode", 1, 1, f_jsdecode},
rettv->vval.v_job->jv_status = JOB_FAILED;
#ifndef USE_ARGV
- ga_init2(&ga, 200);
+ ga_init2(&ga, (int)sizeof(char*), 20);
#endif
if (argvars[0].v_type == VAR_STRING)
#endif
/*
- * The +job feature requires Unix and +eval.
+ * The +job feature requires +eval and Unix or MS-Widndows.
*/
-#if defined(UNIX) && defined(FEAT_EVAL)
+#if (defined(UNIX) || defined(WIN32)) && defined(FEAT_EVAL)
# define FEAT_JOB
#endif
si.cbReserved2 = 0;
si.lpReserved2 = NULL;
- /* There is a strange error on Windows 95 when using "c:\\command.com".
+ /* There is a strange error on Windows 95 when using "c:\command.com".
* When the "c:\\" is left out it works OK...? */
if (mch_windows95()
&& (STRNICMP(cmd, "c:/command.com", 14) == 0
return x;
}
+#if defined(FEAT_JOB) || defined(PROTO)
+ void
+mch_start_job(char *cmd, job_T *job)
+{
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+
+ ZeroMemory(&si, sizeof(si));
+ si.cb = sizeof(si);
+
+ if (!vim_create_process(cmd, FALSE,
+ CREATE_DEFAULT_ERROR_MODE |
+ CREATE_NEW_PROCESS_GROUP |
+ CREATE_NO_WINDOW,
+ &si, &pi))
+ job->jv_status = JOB_FAILED;
+ else
+ {
+ job->jf_pi = pi;
+ job->jv_status = JOB_STARTED;
+ }
+}
+
+ char *
+mch_job_status(job_T *job)
+{
+ DWORD dwExitCode = 0;
+
+ if (!GetExitCodeProcess(job->jf_pi.hProcess, &dwExitCode))
+ return "dead";
+ if (dwExitCode != STILL_ACTIVE)
+ {
+ CloseHandle(job->jf_pi.hProcess);
+ CloseHandle(job->jf_pi.hThread);
+ return "dead";
+ }
+ return "run";
+}
+
+ int
+mch_stop_job(job_T *job, char_u *how)
+{
+ if (STRCMP(how, "kill") == 0)
+ TerminateProcess(job->jf_pi.hProcess, 0);
+ else
+ return GenerateConsoleCtrlEvent(
+ STRCMP(how, "hup") == 0 ?
+ CTRL_BREAK_EVENT : CTRL_C_EVENT,
+ job->jf_pi.dwProcessId) ? OK : FAIL;
+ return OK;
+}
+#endif
+
#ifndef FEAT_GUI_W32
void mch_new_shellsize(void);
void mch_set_winsize_now(void);
int mch_call_shell(char_u *cmd, int options);
+void mch_start_job(char *cmd, job_T *job);
+char *mch_job_status(job_T *job);
+int mch_stop_job(job_T *job, char_u *how);
void mch_set_normal_colors(void);
void mch_write(char_u *s, int len);
void mch_delay(long msec, int ignoreinput);
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1283,
/**/
1282,
/**/