# HG changeset patch # User Christian Brabandt # Date 1458393305 -3600 # Node ID 40bb2619f5e295270a82c442de99db3c8096a5b0 # Parent 74893ef07db0a8167b97db2114f46d7e008d6ba1 commit https://github.com/vim/vim/commit/943bb2b8eb80266a5de143feeab4c842c4b68c61 Author: Bram Moolenaar Date: Sat Mar 19 14:11:18 2016 +0100 patch 7.4.1594 Problem: Timers don't work on Unix. Solution: Add missing code. diff --git a/src/os_unix.c b/src/os_unix.c --- a/src/os_unix.c +++ b/src/os_unix.c @@ -176,6 +176,7 @@ typedef int waitstatus; static pid_t wait4pid(pid_t, waitstatus *); static int WaitForChar(long); +static int WaitForCharOrMouse(long); #if defined(__BEOS__) || defined(VMS) int RealWaitForChar(int, long, int *); #else @@ -5347,13 +5348,50 @@ mch_breakcheck(void) } /* - * Wait "msec" msec until a character is available from the keyboard or from - * inbuf[]. msec == -1 will block forever. + * Wait "msec" msec until a character is available from the mouse, keyboard, + * from inbuf[]. + * "msec" == -1 will block forever. + * Invokes timer callbacks when needed. * When a GUI is being used, this will never get called -- webb */ static int WaitForChar(long msec) { +#ifdef FEAT_TIMERS + long due_time; + long remaining = msec; + + /* When waiting very briefly don't trigger timers. */ + if (msec >= 0 && msec < 10L) + return WaitForCharOrMouse(msec); + + while (msec < 0 || remaining > 0) + { + /* Trigger timers and then get the time in msec until the next one is + * due. Wait up to that time. */ + due_time = check_due_timer(); + if (due_time <= 0 || (msec > 0 && due_time > remaining)) + due_time = remaining; + if (WaitForCharOrMouse(due_time)) + return TRUE; + if (msec > 0) + remaining -= due_time; + } + return FALSE; +#else + return WaitForCharOrMouse(msec); +#endif +} + +/* + * Wait "msec" msec until a character is available from the mouse or keyboard + * or from inbuf[]. + * "msec" == -1 will block forever. + * When a GUI is being used, this will never get called -- webb + */ + static int +WaitForCharOrMouse(long msec) +{ #ifdef FEAT_MOUSE_GPM int gpm_process_wanted; #endif diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -749,6 +749,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1594, +/**/ 1593, /**/ 1592,