mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 8.0.0018
Problem: When using ":sleep" channel input is not handled. Solution: When there is a channel check for input also when not in raw mode. Check every 100 msec.
This commit is contained in:
@@ -341,6 +341,12 @@ add_channel(void)
|
||||
return channel;
|
||||
}
|
||||
|
||||
int
|
||||
has_any_channel(void)
|
||||
{
|
||||
return first_channel != NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Called when the refcount of a channel is zero.
|
||||
* Return TRUE if "channel" has a callback and the associated job wasn't
|
||||
|
@@ -9064,9 +9064,18 @@ do_sleep(long msec)
|
||||
if (due_time > 0 && due_time < wait_now)
|
||||
wait_now = due_time;
|
||||
}
|
||||
#endif
|
||||
#ifdef FEAT_JOB_CHANNEL
|
||||
if (has_any_channel() && wait_now > 100L)
|
||||
wait_now = 100L;
|
||||
#endif
|
||||
ui_delay(wait_now, TRUE);
|
||||
ui_breakcheck();
|
||||
#ifdef FEAT_JOB_CHANNEL
|
||||
if (has_any_channel())
|
||||
ui_breakcheck_force(TRUE);
|
||||
else
|
||||
#endif
|
||||
ui_breakcheck();
|
||||
#ifdef MESSAGE_QUEUE
|
||||
/* Process the netbeans and clientserver messages that may have been
|
||||
* received in the call to ui_breakcheck() when the GUI is in use. This
|
||||
|
@@ -1381,7 +1381,7 @@ mch_call_shell(
|
||||
* trouble with lattice-c programs.
|
||||
*/
|
||||
void
|
||||
mch_breakcheck(void)
|
||||
mch_breakcheck(int force)
|
||||
{
|
||||
if (SetSignal(0L, (long)(SIGBREAKF_CTRL_C|SIGBREAKF_CTRL_D|SIGBREAKF_CTRL_E|SIGBREAKF_CTRL_F)) & SIGBREAKF_CTRL_C)
|
||||
got_int = TRUE;
|
||||
|
@@ -5364,9 +5364,10 @@ mch_clear_job(job_T *job)
|
||||
* In cooked mode we should get SIGINT, no need to check.
|
||||
*/
|
||||
void
|
||||
mch_breakcheck(void)
|
||||
mch_breakcheck(int force)
|
||||
{
|
||||
if (curr_tmode == TMODE_RAW && RealWaitForChar(read_cmd_fd, 0L, NULL, NULL))
|
||||
if ((curr_tmode == TMODE_RAW || force)
|
||||
&& RealWaitForChar(read_cmd_fd, 0L, NULL, NULL))
|
||||
fill_input_buf(FALSE);
|
||||
}
|
||||
|
||||
|
@@ -6187,10 +6187,10 @@ mch_remove(char_u *name)
|
||||
|
||||
|
||||
/*
|
||||
* check for an "interrupt signal": CTRL-break or CTRL-C
|
||||
* Check for an "interrupt signal": CTRL-break or CTRL-C.
|
||||
*/
|
||||
void
|
||||
mch_breakcheck(void)
|
||||
mch_breakcheck(int force)
|
||||
{
|
||||
#ifndef FEAT_GUI_W32 /* never used */
|
||||
if (g_fCtrlCPressed || g_fCBrkPressed)
|
||||
|
@@ -4,6 +4,7 @@ int ch_log_active(void);
|
||||
void ch_log(channel_T *ch, char *msg);
|
||||
void ch_logs(channel_T *ch, char *msg, char *name);
|
||||
channel_T *add_channel(void);
|
||||
int has_any_channel(void);
|
||||
int channel_unref(channel_T *channel);
|
||||
int free_unused_channels_contents(int copyID, int mask);
|
||||
void free_unused_channels(int copyID, int mask);
|
||||
|
@@ -36,7 +36,7 @@ int mch_get_shellsize(void);
|
||||
void mch_set_shellsize(void);
|
||||
void mch_new_shellsize(void);
|
||||
int mch_call_shell(char_u *cmd, int options);
|
||||
void mch_breakcheck(void);
|
||||
void mch_breakcheck(int force);
|
||||
long Chk_Abort(void);
|
||||
int mch_expandpath(garray_T *gap, char_u *pat, int flags);
|
||||
int mch_has_exp_wildcard(char_u *p);
|
||||
|
@@ -61,7 +61,7 @@ void mch_start_job(char **argv, job_T *job, jobopt_T *options);
|
||||
char *mch_job_status(job_T *job);
|
||||
int mch_stop_job(job_T *job, char_u *how);
|
||||
void mch_clear_job(job_T *job);
|
||||
void mch_breakcheck(void);
|
||||
void mch_breakcheck(int force);
|
||||
int mch_expandpath(garray_T *gap, char_u *path, int flags);
|
||||
int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file, char_u ***file, int flags);
|
||||
int mch_has_exp_wildcard(char_u *p);
|
||||
|
@@ -48,7 +48,7 @@ void mch_set_normal_colors(void);
|
||||
void mch_write(char_u *s, int len);
|
||||
void mch_delay(long msec, int ignoreinput);
|
||||
int mch_remove(char_u *name);
|
||||
void mch_breakcheck(void);
|
||||
void mch_breakcheck(int force);
|
||||
long_u mch_total_mem(int special);
|
||||
int mch_wrename(WCHAR *wold, WCHAR *wnew);
|
||||
int mch_rename(const char *pszOldFile, const char *pszNewFile);
|
||||
|
@@ -10,6 +10,7 @@ int ui_get_shellsize(void);
|
||||
void ui_set_shellsize(int mustset);
|
||||
void ui_new_shellsize(void);
|
||||
void ui_breakcheck(void);
|
||||
void ui_breakcheck_force(int force);
|
||||
void clip_init(int can_use);
|
||||
void clip_update_selection(VimClipboard *clip);
|
||||
void clip_own_selection(VimClipboard *cbd);
|
||||
|
12
src/ui.c
12
src/ui.c
@@ -352,13 +352,23 @@ ui_new_shellsize(void)
|
||||
|
||||
void
|
||||
ui_breakcheck(void)
|
||||
{
|
||||
ui_breakcheck_force(FALSE);
|
||||
}
|
||||
|
||||
/*
|
||||
* When "force" is true also check when the terminal is not in raw mode.
|
||||
* This is useful to read input on channels.
|
||||
*/
|
||||
void
|
||||
ui_breakcheck_force(int force)
|
||||
{
|
||||
#ifdef FEAT_GUI
|
||||
if (gui.in_use)
|
||||
gui_mch_update();
|
||||
else
|
||||
#endif
|
||||
mch_breakcheck();
|
||||
mch_breakcheck(force);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
|
@@ -764,6 +764,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
18,
|
||||
/**/
|
||||
17,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user