Как я могу отфильтровать вывод компиляции только для определенного режима или буфера в Emacs? - PullRequest
5 голосов
/ 13 мая 2009

У меня есть HTML-страница с включенным html-mode. Я вызываю функцию sgml-validate для проверки ошибок разметки. Он основан на compilation-mode. Я хочу удалить некоторые предупреждения из выходных данных компиляции, поэтому я написал функцию и подключил ее к compilation-filter-hook (эта переменная не задокументирована, но compilation-filter вызывает ее). Все работает. Моя проблема в том, как я могу гарантировать, что моя функция фильтра будет вызываться только тогда, когда я запустил процесс компиляции на HTML-странице (через sgml-validate)?

Я вижу два метода, но ни один из них не сработал:

  • Сначала я могу проверить значение major-mode. Но он всегда возвращает compilation-mode, поскольку он включен в буфере *compilation*. (Я нашел функцию фильтра в исходном коде grep+, и они проверили значение major-mode. Я не могу понять, как она может работать правильно.)
  • Другая идея заключалась в том, чтобы подключить только мою функцию фильтра к буферу HTML-файла, но по тем же причинам она не могла работать, поскольку выходные данные процесса компиляции попадают в отдельный буфер.

Ответы [ 2 ]

1 голос
/ 13 мая 2009

Похоже, вы можете посоветовать smgl-validate, чтобы он выполнял фильтрацию до того, как выполнит все остальные свои операции. Например:

(defadvice sgml-validate (around fix-filtering command activate)
    (let ((return-value ad-do-it))
      (filter-function return-value))))
1 голос
/ 13 мая 2009

Тем временем я обнаружил, что compilation-start принимает необязательный аргумент mode, который будет основным режимом для буфера компиляции. Поэтому я могу создать основной режим, полученный из compilation-mode, и определить там свою функцию фильтра, теперь подключенную к нужному буферу.

Единственная проблема сейчас в том, что sgml-validate не позволяет мне установить аргумент mode на compilation-start, но это другой вопрос.

(Конечно, я не считаю это окончательным решением).

...