暂时覆盖编译模式regexp alist:动态绑定怪异?

时间:2012-08-21 22:13:17

标签: emacs elisp dynamic-binding compile-mode

我正在研究一种程序模式,它对汇编程序,程序员和其他外部程序有各种不同的调用。我的狡猾计划是使用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>))

奇怪的是,这种绑定似乎不会影响编译缓冲区的解析/标记方式。如果我手动将<my-regexp-and-numbers>推到compilation-error-regexp-alist的前面,然后在缓冲区上调用(compilation-mode t),那么所有内容都会按预期进行实现(因此我没有得到正则表达式错误)。但是,如上所述,在(compilation-mode t)表单中保留对let的调用不会影响任何内容。

我意识到这是一个容易重现的测试用例。如果没有人有任何想法,我会尝试破解一个例子,但我希望有人会去“啊,是的!那是因为当时没有得到评估,而是在”等等......

1 个答案:

答案 0 :(得分:2)

我的猜测是为命令设置了变量,但不知何故没有传递给编译缓冲区。

尝试使用您的方法并在编译缓冲区中查看变量(C-h v)的值以进行确认。