Emacs 将操作附加到按下的任何键

问题描述 投票:0回答:3

假设我有代码:

(defun dummy ()
      (interactive)
      (message "aaa"))

(local-set-key (kbd "<left>") 'dummy)

当您在当前缓冲区中点击

<left>
键时,会打印“aaa”。

是否可以将此操作附加到按下的任何键?

emacs elisp
3个回答
2
投票

解决方案如下:

(defun dummy ()
      (interactive)
      (message "aaa"))

(local-set-key [t] 'dummy)

0
投票

我无法真正设想这种情况的用例,但听起来“默认键绑定”键映射机制会促进它。

对于初学者,请看:

  • C-hig
    (elisp) Format of Keymaps
    RET
  • C-hig
    (elisp) Searching Keymaps
    RET

0
投票

TL;DR:您可以尝试

post-command-hook
(或
pre-command-hook
,这非常接近您想要的:

(defun dummy ()
  (interactive)
  (message "aaa"))
(add-hook 'post-command-hook 'dummy)

更长的解释

我所知道的最接近的是

post-command-hook
。 Emacs 手册有以下文字

[…] Emacs 不会直接为按键赋予含义。相反,Emacs 为命名的命令分配含义,然后通过将键绑定到命令来赋予键其含义。

我将其解释为“没有办法绑定到每个键”,因为设计是你应该处理命令而不是键。

因此,每次按下触发操作的键(包括打印“

foo
未定义”)
时都会调用 
post-command-hookpre-command-hook 。不过,要执行命令(从而触发钩子),您不一定必须按某个键。

总而言之,我认为它也应该涵盖“绑定到任何键”的用例。只要确保不要放置任何占用 CPU 资源的东西,因为这个函数将按照您的需要在每个字母上调用。

© www.soinside.com 2019 - 2024. All rights reserved.