diff src/gui.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 24b43dd167eb
children 4981cd0802c7
line wrap: on
line diff
--- a/src/gui.c
+++ b/src/gui.c
@@ -2855,6 +2855,7 @@ gui_wait_for_chars_or_timer(long wtime)
 #ifdef FEAT_TIMERS
     int	    due_time;
     long    remaining = wtime;
+    int	    tb_change_cnt = typebuf.tb_change_cnt;
 
     /* When waiting very briefly don't trigger timers. */
     if (wtime >= 0 && wtime < 10L)
@@ -2865,6 +2866,11 @@ gui_wait_for_chars_or_timer(long wtime)
 	/* Trigger timers and then get the time in wtime 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 || (wtime > 0 && due_time > remaining))
 	    due_time = remaining;
 	if (gui_mch_wait_for_chars(due_time))