如何仅针对Emacs中的特定模式或缓冲区过滤编译输出?

Tör*_*bor 5 emacs buffer filtering elisp compilation

我有一个HTML页面,已html-mode启用.我调用函数sgml-validate来检查是否有任何标记错误.它基于compilation-mode.我想从编译输出中删除一些警告,所以我编写了一个函数并将其挂钩compilation-filter-hook(此变量未记录,但compilation-filter调用它).一切正常.我的问题是,当我在HTML页面(通过sgml-validate)上启动编译过程时,如何确保只调用我的过滤器函数?

我看到两种方法,但没有一种方法可行:

  • 首先,我可以查看价值major-mode.但它总是返回compilation-mode,因为在*compilation*缓冲区上启用了它.(我在源代码中grep+找到了一个过滤函数,他们确实检查了它的值major-mode.我无法弄清楚它是如何正常工作的.)
  • 另一个想法是仅将我的过滤器函数挂钩到HTML文件的缓冲区,但由于类似的原因,它无法工作,因为编译过程的输出转到单独的缓冲区.

Nat*_*ath 1

听起来您可以建议 smgl-validate 以便它在执行所有其他操作之前执行过滤。例如:

(defadvice sgml-validate(围绕修复过滤命令激活)
    (let ((返回值 ad-do-it))
      (过滤器函数返回值))))