From ecf5f74e6bd8b74923513b504d8c3e5b49b91403 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 27 Feb 2012 21:14:36 +0800 Subject: [PATCH] Fix M-x in Viper mode. * lisp/emulation/viper-cmd.el (viper-intercept-ESC-key): Fix key-binding lookup for ESC key. Fixes: debbugs:9146 --- lisp/ChangeLog | 3 +++ lisp/emulation/viper-cmd.el | 13 +++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cc846534a1c..5b822cc1cdb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-02-27 Chong Yidong + * emulation/viper-cmd.el (viper-intercept-ESC-key): Fix + key-binding lookup for ESC key (Bug#9146). + * font-lock.el (font-lock-specified-p): Rename from font-lock-spec-present. Callers changed. diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el index 503fd2c66d5..68f40349454 100644 --- a/lisp/emulation/viper-cmd.el +++ b/lisp/emulation/viper-cmd.el @@ -1086,8 +1086,17 @@ as a Meta key and any number of multiple escapes are allowed." (defun viper-intercept-ESC-key () "Function that implements ESC key in Viper emulation of Vi." (interactive) - (let ((cmd (or (key-binding (viper-envelop-ESC-key)) - (lambda () (interactive) (error "Viper bell"))))) + ;; `key-binding' needs to be called in a context where Viper's + ;; minor-mode map(s) have been temporarily disabled so the ESC + ;; binding to viper-intercept-ESC-key doesn't hide the binding we're + ;; looking for (Bug#9146): + (let* ((event (viper-envelop-ESC-key)) + (cmd (cond ((equal event viper-ESC-key) + 'viper-intercept-ESC-key) + ((let ((emulation-mode-map-alists nil)) + (key-binding event))) + (t + (error "Viper bell"))))) ;; call the actual function to execute ESC (if no other symbols followed) ;; or the key bound to the ESC sequence (if the sequence was issued -- 2.39.2