diff src/os_win32.c @ 8947:c07caeb90a35 v7.4.1759

commit https://github.com/vim/vim/commit/40b1b5443c88fab77f1f7c6f9e801f7ffdb7e0a8 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Apr 20 20:18:23 2016 +0200 patch 7.4.1759 Problem: When using feedkeys() in a timer the inserted characters are not used right away. Solution: Break the wait loop when characters have been added to typebuf. use this for testing CursorHoldI.
author Christian Brabandt <cb@256bit.org>
date Wed, 20 Apr 2016 20:30:07 +0200
parents e32ab146b6c9
children c44ab784f5e5
line wrap: on
line diff
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -1446,6 +1446,7 @@ WaitForChar(long msec)
     INPUT_RECORD    ir;
     DWORD	    cRecords;
     WCHAR	    ch, ch2;
+    int		    tb_change_cnt = typebuf.tb_change_cnt;
 
     if (msec > 0)
 	/* Wait until the specified time has elapsed. */
@@ -1511,6 +1512,11 @@ WaitForChar(long msec)
 		    /* 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 (typebuf.tb_change_cnt != tb_change_cnt)
+		    {
+			/* timer may have used feedkeys() */
+			return FALSE;
+		    }
 		    if (due_time > 0 && dwWaitTime > (DWORD)due_time)
 			dwWaitTime = due_time;
 		}