mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 7.4.1283
Problem: The job feature isn't available on MS-Windows. Solution: Add the job feature. Fix argument of job_stop(). (Yasuhiro Matsumoto)
This commit is contained in:
@@ -8205,7 +8205,7 @@ static struct fst
|
|||||||
#ifdef FEAT_JOB
|
#ifdef FEAT_JOB
|
||||||
{"job_start", 1, 2, f_job_start},
|
{"job_start", 1, 2, f_job_start},
|
||||||
{"job_status", 1, 1, f_job_status},
|
{"job_status", 1, 1, f_job_status},
|
||||||
{"job_stop", 1, 1, f_job_stop},
|
{"job_stop", 1, 2, f_job_stop},
|
||||||
#endif
|
#endif
|
||||||
{"join", 1, 2, f_join},
|
{"join", 1, 2, f_join},
|
||||||
{"jsdecode", 1, 1, f_jsdecode},
|
{"jsdecode", 1, 1, f_jsdecode},
|
||||||
@@ -14286,7 +14286,7 @@ f_job_start(typval_T *argvars UNUSED, typval_T *rettv)
|
|||||||
|
|
||||||
rettv->vval.v_job->jv_status = JOB_FAILED;
|
rettv->vval.v_job->jv_status = JOB_FAILED;
|
||||||
#ifndef USE_ARGV
|
#ifndef USE_ARGV
|
||||||
ga_init2(&ga, 200);
|
ga_init2(&ga, (int)sizeof(char*), 20);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (argvars[0].v_type == VAR_STRING)
|
if (argvars[0].v_type == VAR_STRING)
|
||||||
|
@@ -1262,9 +1262,9 @@
|
|||||||
#endif
|
#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
|
# define FEAT_JOB
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -4155,7 +4155,7 @@ mch_system_classic(char *cmd, int options)
|
|||||||
si.cbReserved2 = 0;
|
si.cbReserved2 = 0;
|
||||||
si.lpReserved2 = NULL;
|
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...? */
|
* When the "c:\\" is left out it works OK...? */
|
||||||
if (mch_windows95()
|
if (mch_windows95()
|
||||||
&& (STRNICMP(cmd, "c:/command.com", 14) == 0
|
&& (STRNICMP(cmd, "c:/command.com", 14) == 0
|
||||||
@@ -5032,6 +5032,59 @@ mch_call_shell(
|
|||||||
return x;
|
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
|
#ifndef FEAT_GUI_W32
|
||||||
|
|
||||||
|
@@ -40,6 +40,9 @@ void mch_set_shellsize(void);
|
|||||||
void mch_new_shellsize(void);
|
void mch_new_shellsize(void);
|
||||||
void mch_set_winsize_now(void);
|
void mch_set_winsize_now(void);
|
||||||
int mch_call_shell(char_u *cmd, int options);
|
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_set_normal_colors(void);
|
||||||
void mch_write(char_u *s, int len);
|
void mch_write(char_u *s, int len);
|
||||||
void mch_delay(long msec, int ignoreinput);
|
void mch_delay(long msec, int ignoreinput);
|
||||||
|
@@ -747,6 +747,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1283,
|
||||||
/**/
|
/**/
|
||||||
1282,
|
1282,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user