gpt4 book ai didi

emacs - Emacs 函数和命令之间的关系

转载 作者:行者123 更新时间:2023-12-03 21:18:10 25 4
gpt4 key购买 nike

据我了解,在 Emacs 中我可以运行 命令 例如 M-x (顺便说一下,我认为它代表 execute-extended-command )。这个命令 M-x 本身用于运行 customize_face 之类的东西。例如通过键入 M-x customize-face在小缓冲区中。

我的问题是:

问题 1。 customize-face一个 命令 ?还是 功能 ?我们说 customize-face传递给 命令 M-x 作为 论据 ?

Q.2 是否所有 Emacs 命令都有关联的 Emacs 功能 ? (即,当我输入 M-x customize-face 时,我假设定义的 函数 被调用)。如果是这样,我如何从命令名称中查找函数名称? (反之亦然)

最佳答案

是的,所有 Emacs 命令都是函数,但并非所有函数都是 Emacs 命令。您可以通过 M-x 使任意 elisp 函数成为可访问的命令使用 (interactive) :

(defun my-command ()
"This is the docstring"
(interactive)
(do-foo)
(do-bar))

现在您已经定义了 my-command作为交互式,您可以立即使用 M-x my-command 访问它. Emacs 会自动为您完成所有使用该名称的簿记工作。

这就是添加新命令所需要做的一切!然后,您可以将其绑定(bind)到一个键,例如:
(global-set-key (kbd "C-c f") 'my-command)

此外,每个键绑定(bind)都与这样的交互功能相关联。您可以使用 C-h k 找到哪个函数被哪个键调用。并输入您的按键顺序。这将为您提供将在该键序列上调用的函数的文档。如果你运行我给你的代码,做 C-h k C-c f会给你一个包含(除其他外)你的文档字符串的缓冲区:
C-c f runs the command my-command, which is an interactive Lisp
function.

It is bound to C-c f.

(my-command)

This is the docstring

所以:所有 Emacs 命令都只是用 (interactive) 定义的函数。 . (实际上,也有一些来自 Emacs 的 C 核心的原始函数,但这并不是很重要。)

命令和函数之间的这种简单而优雅的关系——在任何一个方向上都很容易遵循——是使 Emacs 如此易于定制的部分原因。如果您想知道您的正常操作调用了哪些函数,您可以轻松查找它们,如果您想添加更多命令,您只需在函数中多写一行。

关于emacs - Emacs 函数和命令之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12585670/

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