次要模式条件Emacs快捷方式

次要模式条件Emacs快捷方式,emacs,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>")

我设置了一个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))
;;将密钥映射添加到次要模式。
(defvar my keys次要模式映射(make keymap)“my keys次要模式keymap.”
;; 按一次escape取消,而不是按三次。
(定义键我的键次要模式映射(kbd“”)“键盘退出”)
(我的钥匙次要模式1)
(defconst我的次要模式列表(cons‘我的钥匙次要模式
我的关键点(次要模式映射)
(setf仿真模式映射列表(我的次要模式列表))
这非常适合以真正全局的方式覆盖快捷方式,取代所有其他次要模式。但是,我需要一种方法,使快捷方式在不同的次要模式下表现不同。例如,我希望在helm运行时按escape键运行helm keyboard quit,否则按run keyboard quit。这样做就像:

(eval-after-load "helm"
  '(progn
    (define-key helm-map (kbd "<escape>") 'helm-keyboard-quit)))
(装载后评估“舵”
"(progn)
(定义关键舵地图(kbd“”)“舵键盘退出”))

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

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

(全局设置键(kbd“”)
(lambda()
(互动)
(如果舵模式(舵键盘退出)
(键盘退出)

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

(全局设置键(kbd“”)
(lambda()
(互动)
(如果舵模式(舵键盘退出)
(键盘退出)

这里有一个相关线程的链接,标题为“如何(有条件地)使用”作为修改键:Stefan在回答中建议的方法类似于源代码中针对
通用参数等情况的其他实现。这里有一个相关线程的链接,标题为“如何(有条件地)使用”作为修改键:Stefan在回答中建议的方法与源代码中的其他实现类似,适用于
通用参数
等情况作为修饰键:Stefan在回答中建议的方法与源代码中的其他实现类似,适用于
通用参数