如何将<escape>键(有条件地)用作修改键

4

当满足特定条件时,是否可以让<escape>激活功能,但在不满足条件时像修饰键一样运行?

(define-key lawlist-mode-map (kbd "<escape>") (lambda () (interactive)
  (cond
    ((ABC . . .)
      (message "You have satisfied condition ABC."))
    ((DEF . . .)
      (message "You have satisfied condition DEF."))
    (t (The <escape> key shall behave like a modifier key:  ESC- )) )))

编辑:根据Stefan提供的精彩解决方案,以下是如何使用他的代码处理多个条件(例如,如果ABC,则执行X;如果DEF,则执行Y)的示例。我包括这个例子是为了像我这样学习慢的人--也就是说,我花了一些时间才理解如何正确应用代码。

(global-set-key (kbd "<escape>") `(menu-item ""
  ,(lambda () (interactive)
  (cond
    ((Set forth condition ABC.)
      (message "You have satisfied condition ABC."))
    ((Set forth condition DEF.)
      (message "You have satisfied condition DEF."))))
  :filter ,(lambda (binding)
  (if (or (Set forth condition ABC.)
       (Set forth condition DEF.))
    binding))))
1个回答

2

您可以这样做:

(define-key lawlist-mode-map [?\e]
  `(menu-item "" ,(lambda () (interactive) (message "You have satisfied condition ABC."))
              :filter ,(lambda (binding) (if (ABC ...) binding))))

感谢您发布示例。为了调试我对您的代码所做的修改,我将其转换为全局设置键,但是按下Escape键后无法生成消息:有没有关于如何创建一个开箱即用的演示其使用的工作示例的想法?(global-set-key [?\e] '(menu-item "" ,(lambda () (interactive) (message "You have satisfied condition ABC.")) :filter ,(lambda (binding) (if (eq major-mode 'text-mode) binding)))) - lawlist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接