gpt4 book ai didi

hook - 连续执行一个emacs lisp函数

转载 作者:行者123 更新时间:2023-12-04 14:06:41 25 4
gpt4 key购买 nike

有没有办法触发除 M-x myfun 之外的 emacs lisp 函数的执行?我希望每次更改缓冲区时都重新调用该函数。

背景:我有一张有一些错误的数字表。该表具有列总计和其他可用于识别错误的功能。我的 elisp 函数会突出显示可疑的数字列。我想要的是,一旦数字被纠正,突出显示就会消失,而不需要重复调​​用 highlight-errors 函数。

我相信 Excel 中的类似功能称为“条件格式”

最佳答案

您在第一段中寻找的概念是钩子(Hook)。 Hook 变量是在某个事件发生时执行的函数列表。大多数 Hook 变量的名称以 -hook 结尾.钩子(Hook)after-change-functions每次键入内容或更改缓冲区时都会执行。 Hooks 在 Emacs Lisp 手册中的“Hooks”标题下进行了讨论。

但是,考虑到您要执行的操作,使用 Emacs 的突出显示机制会更容易。解决方案可能就像在正确的位置添加正则表达式一样简单。

大多数包含结构化文本(尤其是编程语言)的文件都使用字体锁定机制突出显示。这在 Emacs 和 Emacs Lisp 手册的“Font Lock”下都有记录;尤其是函数 font-lock-add-keywords , Emacs 手册给出了一个例子,这几乎就是你所追求的。还有some information on the Emacs wiki .

已添加:

字体锁定可以超越正则表达式;不幸的是,文档仅限于 font-lock-keywords 文档字符串中的简洁说明。 . cperl-mode.el 中有几个简单的例子(尽管它们有些被埋在群众中)。 wiki 还引用了 ctypes.el 它使用此功能。这是一个突出显示错误整数加法的示例。

(defun maybe-warn-about-addition ()
(let ((x (string-to-int (match-string 1)))
(y (string-to-int (match-string 2)))
(z (string-to-int (match-string 3))))
(if (/= (+ x y) z)
font-lock-warning-face)))
(font-lock-add-keywords
nil
'(("\\s-\\([0-9]+\\)\\s-*\\+\\s-*\\([0-9]+\\)\\s-*=\\s-*\\([0-9]+\\)\\s-"
(3 (maybe-warn-about-addition) t))))

甚至正则表达式也可以替换为查找要突出显示的范围的任意代码(函数名称为 MATCHER ,使用文档字符串中的词汇表)。在标准 C 模式 ( cc-fonts.el ) 中有一个字体锁定关键字的高级示例。

关于hook - 连续执行一个emacs lisp函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3426197/

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