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 <help-echo>) received in this time, before polling for the double-click (etc.) events which may follow. This fixes the infinite loop which occurred whwn <help-echo> events triggered a sit-for whilst handling menu events.
This commit is contained in:
parent
90075e8e1e
commit
e9dd580cc8
1 changed files with 11 additions and 5 deletions
16
lisp/help.el
16
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. <help-echo>) 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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue