Mercurial > hg > xemacs-beta
changeset 5751:2b8edd304c2b
Avoid throwing an error with misc-user events in isearch-pre-command-hook.
lisp/ChangeLog addition:
2013-08-05 Aidan Kehoe <kehoea@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!
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Mon, 05 Aug 2013 13:34:27 +0100 |
parents | 66d2f63df75f |
children | 70a3f4ff8da8 |
files | lisp/ChangeLog lisp/isearch-mode.el |
diffstat | 2 files changed, 35 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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@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@parhasard.net> * behavior.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 ()