]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid returning early in 'while-no-input' due to subprocesses
authorEli Zaretskii <eliz@gnu.org>
Sat, 29 Sep 2018 07:11:08 +0000 (10:11 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 29 Sep 2018 07:11:08 +0000 (10:11 +0300)
* src/keyboard.c (kbd_buffer_store_buffered_event): Support
also the internal buffer-switch events.
(syms_of_keyboard) <Qbuffer_switch>: New DEFSYM.

* lisp/subr.el (while-no-input-ignore-events): Ignore
'buffer-switch' events.  Reported by Michael Heerdegen
<michael_heerdegen@web.de>.

* etc/NEWS: Mention the change in behavior of 'while-no-input'

etc/NEWS
lisp/subr.el
src/keyboard.c

index 578b9b8d956485b549bf9d4cae18ad9c32308cfa..bfd7db016f2fa551f81d933711791b1915c21219 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -123,6 +123,16 @@ be removed prior using the changed 'shadow-*' commands.
 The old name is an alias of the new name.  Future Emacs version will
 obsolete it.
 
+---
+** 'while-no-input' does not return due to input from subprocesses.
+Input that arrived from subprocesses while some code executed inside
+the 'while-no-input' form injected an internal buffer-switch event
+that counted as input and would cause 'while-no-input' to return,
+perhaps prematurely.  These buffer-switch events are now by default
+ignored by 'while-no-input'; if you need to get the old behavior,
+remove 'buffer-switch' from the list of events in
+'while-no-input-ignore-events'.
+
 \f
 * Lisp Changes in Emacs 26.2
 
index 7582b6cdb853bd250cb77aef63ec95fd61f8b9ca..59f6949b2115e108e5470245874e30d59b0f14d9 100644 (file)
@@ -3542,7 +3542,7 @@ is allowed once again.  (Immediately, if `inhibit-quit' is nil.)"
 ;; Don't throw `throw-on-input' on those events by default.
 (setq while-no-input-ignore-events
       '(focus-in focus-out help-echo iconify-frame
-        make-frame-visible selection-request))
+        make-frame-visible selection-request buffer-switch))
 
 (defmacro while-no-input (&rest body)
   "Execute BODY only as long as there's no pending input.
index 1da5ac088d3e2d4895c25e8339468cab3b581769..0d56ea3f7ac911658d2fed1029acd90d79e7b650 100644 (file)
@@ -3569,6 +3569,7 @@ kbd_buffer_store_buffered_event (union buffered_input_event *event,
     case ICONIFY_EVENT: ignore_event = Qiconify_frame; break;
     case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break;
     case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break;
+    case BUFFER_SWITCH_EVENT: ignore_event = Qbuffer_switch; break;
     default: ignore_event = Qnil; break;
     }
 
@@ -11104,6 +11105,8 @@ syms_of_keyboard (void)
   /* Menu and tool bar item parts.  */
   DEFSYM (Qmenu_enable, "menu-enable");
 
+  DEFSYM (Qbuffer_switch, "buffer-switch");
+
 #ifdef HAVE_NTGUI
   DEFSYM (Qlanguage_change, "language-change");
   DEFSYM (Qend_session, "end-session");