Mercurial > hg > xemacs-beta
diff lisp/isearch-mode.el @ 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 | b7ae5f44b950 |
children | 0bddb59072b6 |
line wrap: on
line diff
--- 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 ()