我设置了一个emacs快捷方式:
;; Adding the key mappings to minor mode.
(defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.")
;; Cancel with one press of escape instead of three.
(define-key my-keys-minor-mode-map (kbd "<escape>") 'keyboard-quit)
(my-keys-minor-mode 1)
(defconst my-minor-mode-alist (list (cons 'my-keys-minor-mode
my-keys-minor-mode-map)))
(setf emulation-mode-map-alists '(my-minor-mode-alist))
这非常适合以真正全局的方式覆盖快捷方式,取代所有其他次要模式。但是我需要一种方法来使快捷方式在不同的次要模式下表现不同。例如,我希望转义键在helm运行时运行helm-keyboard-quit运行bu run keyboard-quit。这样做:
(eval-after-load "helm"
'(progn
(define-key helm-map (kbd "<escape>") 'helm-keyboard-quit)))
将无效,因为全局转义快捷方式将覆盖它。有没有办法做到这一点?
答案 0 :(得分:0)
为什么不使用简单的lambda。像这样(未经测试):
(global-set-key (kbd "<escape>")
(lambda()
(interactive)
(if helm-mode (helm-keyboard-quit)
(keyboard-quit))))