From e9dd580cc8b3134eb82d758efb070a3ab8dd3e9a Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Sat, 18 Nov 2017 14:52:39 +0000 Subject: [PATCH] Filter obtrusive events in help-read-key-sequence. This fixes most of bug #29272. * lisp/help.el (help-read-key-sequence): After a mouse event, pause for 0.01s, discarding any events (such as ) received in this time, before polling for the double-click (etc.) events which may follow. This fixes the infinite loop which occurred whwn events triggered a sit-for whilst handling menu events. --- lisp/help.el | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lisp/help.el b/lisp/help.el index fbb9fc8cbe6..212e3679dad 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -728,11 +728,17 @@ with `mouse-movement' events." Describe the following key, mouse click, or menu item: ")) ((and (pred vectorp) (let `(,key0 . ,_) (aref key 0)) (guard (symbolp key0)) (let keyname (symbol-name key0))) - (if no-mouse-movement - (string-match "mouse-movement" keyname) - (and (string-match "\\(mouse\\|down\\|click\\|drag\\)" - keyname) - (not (sit-for (/ double-click-time 1000.0) t))))))) + (or + (and no-mouse-movement + (string-match "mouse-movement" keyname)) + (and (string-match "\\(mouse\\|down\\|click\\|drag\\)" + keyname) + (progn + ;; Discard events (e.g. ) which might + ;; spuriously trigger the `sit-for'. + (sleep-for 0.01) + (while (read-event nil nil 0.01)) + (not (sit-for (/ double-click-time 1000.0) t)))))))) (list key ;; If KEY is a down-event, read and include the -- 2.39.2