我正在研究一种程序模式,它对汇编程序、程序员和其他外部程序有各种不同的调用。我巧妙的计划是用compile
函数处理所有这些,传递一个明确的compile-command
,这取决于正在运行的程序。
这种方法似乎有效,现在我想为不同的外部程序添加特定的错误regexp。一种选择是更改compilation-error-regexp-alist-alist
,打开我的主模式,然后将我的主方式添加到compilation-error-regexp-alist
。
不过,我更愿意做的事情如下:
(let ((compilation-error-regexp-alist
(cons <my-regexp-and-numbers> compilation-error-regexp-alist))
(compile <my-compile-command>))
奇怪的是,这个绑定似乎不会影响编译缓冲区的解析/标记方式。如果我手动将<my-regexp-and-numbers>
推到compilation-error-regexp-alist
的前面,然后在缓冲区上调用(compilation-mode t)
,那么一切都会按预期进行字体化(所以我没有弄错regexp)。但是,如上所述,在let
表单中坚持对(compilation-mode t)
的调用不会影响任何内容。
我意识到,作为一个易于复制的测试用例,它失败得很惨。如果没有人有任何想法,我会尝试想出一个例子,但我希望有人会说"啊,是的!那是因为当时没有得到评估,而是在"之类的话。。。
我的猜测是,变量是为命令设置的,但不知何故没有传递到编译缓冲区。
请尝试您的方法,并查看编译缓冲区中变量(C-h v
)的值以进行确认。