假设我有代码:
(defun dummy ()
(interactive)
(message "aaa"))
(local-set-key (kbd "<left>") 'dummy)
当您在当前缓冲区中点击
<left>
键时,会打印“aaa”。
是否可以将此操作附加到按下的任何键?
解决方案如下:
(defun dummy ()
(interactive)
(message "aaa"))
(local-set-key [t] 'dummy)
我无法真正设想这种情况的用例,但听起来“默认键绑定”键映射机制会促进它。
对于初学者,请看:
(elisp) Format of Keymaps
RET(elisp) Searching Keymaps
RETTL;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-hook
和 pre-command-hook
。不过,要执行命令(从而触发钩子),您不一定必须按某个键。
总而言之,我认为它也应该涵盖“绑定到任何键”的用例。只要确保不要放置任何占用 CPU 资源的东西,因为这个函数将按照您的需要在每个字母上调用。