有没有办法触发执行除M-x myfun以外的emacs lisp功能?我希望在每次更改缓冲区时重新调用该函数。持续执行emacs lisp功能
背景:我有一个数字表有一些错误。该表具有列总数和可用于识别错误的其他功能。我的elisp函数突出显示可疑的数字列。我想要的是,只要数字得到纠正,突出显示就会消失,而不会重复调用突出显示错误功能。
在Excel中的类似功能被称为,我相信,“条件格式”
有没有办法触发执行除M-x myfun以外的emacs lisp功能?我希望在每次更改缓冲区时重新调用该函数。持续执行emacs lisp功能
背景:我有一个数字表有一些错误。该表具有列总数和可用于识别错误的其他功能。我的elisp函数突出显示可疑的数字列。我想要的是,只要数字得到纠正,突出显示就会消失,而不会重复调用突出显示错误功能。
在Excel中的类似功能被称为,我相信,“条件格式”
您在第一段中寻找的概念是挂钩。一个hook变量是当某个事件发生时执行的函数列表。大多数钩子变量的名字都以-hook
结尾。每次键入内容或更改缓冲区时,都会执行挂钩after-change-functions
。挂钩在Emacs Lisp手册的“挂钩”标题下讨论。
但是,考虑到您要做的事情,使用Emacs的突出显示机制会更容易。解决方案可能很简单,只需在正确的位置添加正则表达式即可。
包含结构化文本(尤其是编程语言)的大多数文件都使用字体锁定机制突出显示。这在Emacs和Emacs Lisp手册的“字体锁定”下都有记录。特别参见功能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
)。
加入你的函数变量after-change-functions
。
当然,你可以做到这一点。查看'c-mode'实现'电子支架'。 – 2010-08-06 17:48:17