次要模式条件Emacs快捷方式

时间:2015-06-06 22:55:21

标签: emacs

我设置了一个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)))

将无效,因为全局转义快捷方式将覆盖它。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

为什么不使用简单的lambda。像这样(未经测试):

(global-set-key (kbd "<escape>")
                (lambda()
                  (interactive)
                  (if helm-mode (helm-keyboard-quit)
                    (keyboard-quit))))