APPROVE COMMIT
NOTE: This patch has been committed.
# HG changeset patch
# User Aidan Kehoe <kehoea(a)parhasard.net>
# Date 1375706067 -3600
# Node ID 2b8edd304c2b820bddca2ede4e40cc6191ab2b84
# Parent 66d2f63df75f970d8a4ee919c5fc612cc2501720
Avoid throwing an error with misc-user events in isearch-pre-command-hook.
lisp/ChangeLog addition:
2013-08-05 Aidan Kehoe <kehoea(a)parhasard.net>
* isearch-mode.el (isearch-pre-command-hook):
If this function is called and (this-command-keys) contains
misc-user events, #'key-binding throws an error.
Eddie Corns and Alex Belits describe this happening in tracker
issue 336, and we can avoid this by catching the error and
handling the misc-user event in the same way that #'dispatch-event
does.
I haven't reproduced the actual error they describe, and welcome
testing to make sure it's gone.
Thank you Eddie, thank you Alex!
diff -r 66d2f63df75f -r 2b8edd304c2b lisp/ChangeLog
--- a/lisp/ChangeLog Mon Aug 05 10:05:32 2013 +0100
+++ b/lisp/ChangeLog Mon Aug 05 13:34:27 2013 +0100
@@ -1,3 +1,16 @@
+2013-08-05 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * isearch-mode.el (isearch-pre-command-hook):
+ If this function is called and (this-command-keys) contains
+ misc-user events, #'key-binding throws an error.
+ Eddie Corns and Alex Belits describe this happening in tracker
+ issue 336, and we can avoid this by catching the error and
+ handling the misc-user event in the same way that #'dispatch-event
+ does.
+ I haven't reproduced the actual error they describe, and welcome
+ testing to make sure it's gone.
+ Thank you Eddie, thank you Alex!
+
2013-08-05 Aidan Kehoe <kehoea(a)parhasard.net>
* behavior.el:
diff -r 66d2f63df75f -r 2b8edd304c2b lisp/isearch-mode.el
--- a/lisp/isearch-mode.el Mon Aug 05 10:05:32 2013 +0100
+++ b/lisp/isearch-mode.el Mon Aug 05 13:34:27 2013 +0100
@@ -1579,7 +1579,28 @@
;; FSF does similar magic in `isearch-other-meta-char', which
;; is horribly complex. I *hope* what we do works in all
;; cases.
- (setq this-command (key-binding (this-command-keys))))
+ (setq this-command
+ (condition-case nil
+ (key-binding (this-command-keys))
+ (wrong-type-argument
+ ;; #'key-binding didn't like one of the events --> it's
+ ;; probably a misc-user object, repeat what
+ ;; #'dispatch-event does for this case.
+ (let ((this-command-keys (this-command-keys))
+ event-function)
+ (when (and (> (length this-command-keys) 0)
+ (misc-user-event-p (aref this-command-keys 0)))
+ (setq event-function
+ (event-function (aref this-command-keys 0)))
+ (case event-function
+ (call-interactively
+ (event-object (aref this-command-keys 0)))
+ (eval
+ `(lambda nil (interactive)
+ ,(event-object (aref this-command-keys 0))))
+ (otherwise
+ ;; Scrollbar command or the like.
+ (and (symbolp event-function) event-function)))))))))
(t
(labels
((isearch-maybe-frob-keyboard-macros ()
--
‘Liston operated so fast that he once accidentally amputated an assistant’s
fingers along with a patient’s leg, […] The patient and the assistant both
died of sepsis, and a spectator reportedly died of shock, resulting in the
only known procedure with a 300% mortality.’ (Atul Gawande, NEJM, 2012)
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-patches