考虑Emacs中的击键,例如C-x C-s.我可以通过键入找出它调用的函数,但是如何找到这个键绑定的定义位置?C-h c keystroke
(也许正确的答案是无法确定,因为键盘映射不存储此类信息.)
Emacs不保留关于键绑定与功能相关联的信息.事实上,答案通常是不确定的.
很多时候,键绑定被设置为次要模式的副作用,或者通过模式挂钩.小模式的键绑定通常存储在某些变量中comint-mode-map
.通过设置mode-variable启用此键映射comint-mode
.但是,该模式映射是一个全局变量,任何人都可以在任何地方添加键绑定.因此,做你想做的事实上是跟踪谁设置一个具有特定值的变量.类似地,对于仅通过模式挂钩(使用local-set-key
)在本地设置的键绑定.另外,您甚至可以通过文件变量设置键绑定.所有这些只是说Emacs中的键绑定是短暂的.
您可以做的最好的事情是找到与密钥关联的功能,并查看该文件(或任何相关文件,如果模式被拆分为多个文件).
由于可以设置/关联键击的全部方式(全局,主要模式,次要模式,覆盖次要模式,本地缓冲区,文本属性等),因此emacs中的键绑定查找非常复杂.有关快速概述,请查看此文档.
您可以编写这样的函数来查看次要模式以查看可能设置键绑定的位置,但当然我的第一个测试显示未在此处定义键绑定.但也许代码会有所帮助.
(defun guess-where-keybinding-is-defined (key) "try to guess where a key binding might be defined" (interactive (list (read-key-sequence "Describe key: "))) (let ((bindings (minor-mode-key-binding key)) found) (while (and bindings (not found)) (if (setq found (caar bindings)) (find-function (cdar bindings))) (setq bindings (cdr bindings)))))
您是否正在尝试解决一个特定问题(除了这个问题)?