5

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

我看到了两种方法,但都没有奏效:

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

2 回答 2

1

同时,我发现compilation-start接受一个可选参数mode,这将是编译缓冲区的主要模式。所以我可以创建一个从 派生的主要模式compilation-mode,并在那里定义我的过滤器函数现在连接到正确的缓冲区。

唯一的问题是现在sgml-validate不允许我将mode参数设置为compilation-start,但这是另一个问题。

(当然,我不认为这是最终的解决方案。)

于 2009-05-13T11:10:41.470 回答
1

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

(defadvice sgml-validate(围绕修复过滤命令激活)
    (let ((return-value ad-do-it))
      (过滤器函数返回值))))
于 2009-05-13T13:54:13.857 回答