Mercurial > emacs
changeset 37398:756d2f4e4058
(wait_reading_process_input): Call
record_asynch_buffer_change after running timers, to make
read_key_sequence aware of buffer changes from under it.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Thu, 19 Apr 2001 12:47:33 +0000 |
parents | ec77fd25c155 |
children | 9e11cb3d60f1 |
files | src/process.c |
diffstat | 1 files changed, 46 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/process.c Thu Apr 19 07:36:35 2001 +0000 +++ b/src/process.c Thu Apr 19 12:47:33 2001 +0000 @@ -2453,7 +2453,15 @@ do { int old_timers_run = timers_run; + timer_delay = timer_check (1); + + /* If a timer has run, this might have changed buffers + an alike. Make read_key_sequence aware of that. */ + if (timers_run != old_timers_run + && waiting_for_user_input_p == -1) + record_asynch_buffer_change (); + if (timers_run != old_timers_run && do_display) /* We must retry, since a timer may have requeued itself and that could alter the time_delay. */ @@ -2667,14 +2675,28 @@ /* If there is any, return immediately to give it higher priority than subprocesses */ - if (XINT (read_kbd) != 0 - && detect_input_pending_run_timers (do_display)) + if (XINT (read_kbd) != 0) { - swallow_events (do_display); + int old_timers_run = timers_run; + int leave = 0; + if (detect_input_pending_run_timers (do_display)) + { + swallow_events (do_display); + if (detect_input_pending_run_timers (do_display)) + leave = 1; + } + + /* If a timer has run, this might have changed buffers + an alike. Make read_key_sequence aware of that. */ + if (timers_run != old_timers_run + && waiting_for_user_input_p == -1) + record_asynch_buffer_change (); + + if (leave) break; - } - + } + /* If there is unread keyboard input, also return. */ if (XINT (read_kbd) != 0 && requeued_events_pending_p ()) @@ -4894,14 +4916,28 @@ /* Check for keyboard input */ - if ((XINT (read_kbd) != 0) - && detect_input_pending_run_timers (do_display)) + if (XINT (read_kbd) != 0) { - swallow_events (do_display); + int old_timers_run = timers_run; + int leave = 0; + if (detect_input_pending_run_timers (do_display)) + { + swallow_events (do_display); + if (detect_input_pending_run_timers (do_display)) + leave = 1; + } + + /* If a timer has run, this might have changed buffers + an alike. Make read_key_sequence aware of that. */ + if (timers_run != old_timers_run + && waiting_for_user_input_p == -1) + record_asynch_buffer_change (); + + if (leave) break; - } - + } + /* If there is unread keyboard input, also return. */ if (XINT (read_kbd) != 0 && requeued_events_pending_p ())