To: vim_dev@googlegroups.com Subject: Patch 7.4.1594 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.1594 Problem: Timers don't work on Unix. Solution: Add missing code. Files: src/os_unix.c *** ../vim-7.4.1593/src/os_unix.c 2016-03-11 22:52:00.738438072 +0100 --- src/os_unix.c 2016-03-19 14:05:21.646727700 +0100 *************** *** 176,181 **** --- 176,182 ---- 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,5359 **** } /* ! * Wait "msec" msec until a character is available from the keyboard or from ! * inbuf[]. msec == -1 will block forever. * When a GUI is being used, this will never get called -- webb */ static int WaitForChar(long msec) { #ifdef FEAT_MOUSE_GPM int gpm_process_wanted; #endif --- 5348,5397 ---- } /* ! * 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 *** ../vim-7.4.1593/src/version.c 2016-03-19 13:49:39.460590857 +0100 --- src/version.c 2016-03-19 14:06:12.342197470 +0100 *************** *** 750,751 **** --- 750,753 ---- { /* Add new patch number below this line */ + /**/ + 1594, /**/ -- ASCII stupid question, get a stupid ANSI. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///