gpt4 book ai didi

emacs - 在哪个文件中定义了键绑定(bind)?

转载 作者:行者123 更新时间:2023-12-04 15:05:39 26 4
gpt4 key购买 nike

考虑 Emacs 中的击键,例如C-x C-s。我可以通过键入 C-h c keystroke 来找出它调用的函数,但是我怎样才能找到这个键绑定(bind)的定义位置?

(也许正确的答案是无法确定,因为键盘映射不存储此类信息。)

最佳答案

Emacs 不保存关于键绑定(bind)与函数关联的位置的信息。事实上,答案通常是不确定的。

很多时候,键绑定(bind)被设置为次要模式的副作用,或者通过模式 Hook 。次要模式的键绑定(bind)通常存储在一些变量中,例如 comint-mode-map .通过设置模式变量 comint-mode 启用此键盘映射。 .但是,该模式映射是一个全局变量,任何地方的任何人都可以向它添加键绑定(bind)。所以,做你想做的事情本质上是跟踪谁设置了一个具有特定值的变量。类似地,对于仅通过模式 Hook 在本地设置的键绑定(bind)(使用 local-set-key )。此外,您甚至可以通过 file variables 设置键绑定(bind).所有这些只是说 Emacs 中的键绑定(bind)是短暂的。

您可以做的最好的事情是找到与 key 关联的功能,然后查看该文件(或任何相关文件,如果该模式被拆分为多个文件)。

由于您可以设置/关联击键的方式多种多样(全局、主要模式、次要模式、覆盖次要模式、缓冲区本地、文本属性等),因此 Emacs 中的键绑定(bind)查找相当复杂。如需快速概览,请查看 this documentation .

您可以编写这样的函数来查看次要模式以查看可能设置键绑定(bind)的位置,但当然我的第一个测试显示键绑定(bind)没有在那里定义。但也许代码会很有启发性。

(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)))))

是否有您要解决的特定问题(除了这个问题)?

关于emacs - 在哪个文件中定义了键绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/819696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com