Как я могу фильтровать выходные данные компиляции только для определенного режима или буфера в Emacs?

StackOverflow https://stackoverflow.com/questions/857098

Вопрос

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

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

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

Решение

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

(defadvice sgml-validate (around fix-filtering command activate)
    (let ((return-value ad-do-it))
      (filter-function return-value))))

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top