* src/dispnew.c (sit_for): Return nil when interrupted by process output
Before adbb4eacc2
,
`read_and_dispose_of_process_output` called
`record_asynch_buffer_change` which added "artificial" input events
(in the form of BUFFER_SWITCH_EVENTs), causing sit_for to return
Qnil when interrupted by process output. Without those BUFFER_SWITCH_EVENTs,
sit_for now tends to return Qt when interrupted by process output
making `read_char` believe that we've waited the whole timeout,
As consequence incoming process output tended to cause premature
auto-saving of files (sometimes right after almost every key press).
This patch recovers the previous behavior, which is not ideal
(incoming process output can delay auto-save indefinitely), but has
been good enough for many years.
This commit is contained in:
parent
f45be48ddb
commit
5d6817086d
1 changed files with 12 additions and 4 deletions
|
@ -6049,7 +6049,14 @@ additional wait period, in milliseconds; this is for backwards compatibility.
|
|||
READING is true if reading input.
|
||||
If DISPLAY_OPTION is >0 display process output while waiting.
|
||||
If DISPLAY_OPTION is >1 perform an initial redisplay before waiting.
|
||||
*/
|
||||
|
||||
Returns a boolean Qt if we waited the full time and returns Qnil if the
|
||||
wait was interrupted by incoming process output or keyboard events.
|
||||
|
||||
FIXME: When `wait_reading_process_output` returns early because of
|
||||
process output, instead of returning nil we should loop and wait some
|
||||
more (i.e. until either there's pending input events or the timeout
|
||||
expired). */
|
||||
|
||||
Lisp_Object
|
||||
sit_for (Lisp_Object timeout, bool reading, int display_option)
|
||||
|
@ -6110,8 +6117,9 @@ sit_for (Lisp_Object timeout, bool reading, int display_option)
|
|||
gobble_input ();
|
||||
#endif
|
||||
|
||||
wait_reading_process_output (sec, nsec, reading ? -1 : 1, do_display,
|
||||
Qnil, NULL, 0);
|
||||
int nbytes
|
||||
= wait_reading_process_output (sec, nsec, reading ? -1 : 1, do_display,
|
||||
Qnil, NULL, 0);
|
||||
|
||||
if (reading && curbuf_eq_winbuf)
|
||||
/* Timers and process filters/sentinels may have changed the selected
|
||||
|
@ -6120,7 +6128,7 @@ sit_for (Lisp_Object timeout, bool reading, int display_option)
|
|||
buffer to start with). */
|
||||
set_buffer_internal (XBUFFER (XWINDOW (selected_window)->contents));
|
||||
|
||||
return detect_input_pending () ? Qnil : Qt;
|
||||
return (nbytes > 0 || detect_input_pending ()) ? Qnil : Qt;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue