emacs - 暂时覆盖编译模式 regexp alist : dynamic binding weirdness?

标签 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>))

奇怪的是,这个绑定(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/

相关文章:

perl - 是否可以在 emacs 中突出显示内插的 perl 变量?

data-structures - Emacs Lisp : Standard way to verify tree structures?

Emacs:在函数内使用 add-hook (defun)

c++ - 关于std::move()在成员重载中的使用问题

c# - 为什么有些语言更喜欢静态方法绑定(bind)而不是动态方法绑定(bind)?

每个窗口的 emacs 切换缓冲区

networking - 如何使用本地运行的emacs访问远程文件?

emacs - 使用语法表在 emacs 模式下的单行和多行注释

emacs - Elisp:如何在字节编译时避免 "functions are not known to be defined"?

c++ - 接口(interface)范式性能(动态绑定(bind)与泛型编程)