我正在开发一种程序模式,该模式对汇编程序、程序员和其他外部程序有各种不同的调用。我狡猾的计划是用compile
来处理所有这些。函数,传递显式 compile-command
这取决于正在运行的程序。
这种似乎可行,现在我想为不同的外部程序添加特定的错误正则表达式。一种选择是更改 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>))
奇怪的是,这个绑定(bind)似乎并不影响编译缓冲区的解析/标记方式。如果我手动推送<my-regexp-and-numbers>
到 compilation-error-regexp-alist
的正面然后调用(compilation-mode t)
在缓冲区上,一切都按预期进行字体化(所以我没有得到正则表达式错误)。但是,请继续调用 (compilation-mode t)
里面 let
上面的形式不会影响任何东西。
我意识到作为一个易于重现的测试用例,它惨遭失败。如果没有人有任何想法,我会尝试编写一个例子,但我希望有人会说“啊,是的!那是因为那时没有得到评估,而是在”或类似的东西...... .
最佳答案
我的猜测是该变量是为命令设置的,但不知何故没有传递到编译缓冲区。
尝试您的方法并查看编译缓冲区内的变量值 (C-h v
) 以进行确认。
关于emacs - 暂时覆盖编译模式 regexp alist : dynamic binding weirdness?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063825/