Открытие файла HTML с помощью nXhtml приводит к ошибке с flymake

Когда я открываю файл HTML с помощью emacs (и nXhtml), я получаю следующую ошибку от flymake:

Ошибка (flymake): Flymake: не удалось запустить процесс проверки синтаксиса «xml» с аргументами (val /home/ABC/Downloads/capitals_flymake.html): поиск программы: нет такого файла или каталога, xml. Flymake будет выключен

Я предполагаю, что это означает, что мне нужно установить программу, которую можно запустить в командной строке с помощью xml. Однако мне не удалось узнать, что это за программа в документации.

В настоящее время я также использую следующий суть (с модификацией, предложенной одним из комментаторов для изменения equal на >=), чтобы отключить предупреждение об именах буферных файлов Mumamo в моем .emacs:

;; Workaround the annoying warnings:
;; Warning (mumamo-per-buffer-local-vars):
;; Already 'permanent-local t: buffer-file-name
(when
    (and
     (>= emacs-major-version 24)
     (>= emacs-minor-version 2))
  (eval-after-load "mumamo"
    '(setq mumamo-per-buffer-local-vars
       (delq 'buffer-file-name mumamo-per-buffer-local-vars))))

Но я не уверен, что это актуально.

Как заставить flymake работать с nXhtml? В настоящее время я использую GNU Emacs 24.3.1.


person DJG    schedule 11.06.2013    source источник
comment
Использование tidy также было бы хорошо. Но я не нашел способа изменить настройки nXhtml для использования tidy. Я на Ubuntu и попробовал apt-cache search xml, но у меня много экранов с разными пакетами. Я думаю, если бы я только знал, что такое правильный пакет, я мог бы его скачать. Спасибо   -  person DJG    schedule 11.06.2013


Ответы (2)


У меня есть это в моем .emacs для живой проверки XML и HTML, посмотрите, поможет ли это.

(defun flymake-xml-init ()
  (list "xmllint"
        (list "--valid"
              (flymake-init-create-temp-buffer-copy
               'flymake-create-temp-inplace))))

(defun flymake-html-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
                     'flymake-create-temp-inplace))
         (local-file (file-relative-name
                      temp-file
                      (file-name-directory buffer-file-name))))
    (list "tidy" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
             '("\\.html$" flymake-html-init))

Кроме того, xml исполняемый файл: это может быть этот http://packages.ubuntu.com/quantal/amd64/xml2/filelist судя по тому, как это выглядит... также можно попробовать apt-file /usr/bin/xml (я не уверен, установлен ли apt-file по умолчанию, если нет, то apt-get install apt-file). Кроме того, возможно, это поможет: http://www.emacswiki.org/emacs/FlyMake . Я не смог найти какой-либо настройки, относящейся к nXhtml, которая бы что-то делала с flymake.

person Community    schedule 11.06.2013
comment
Я добавил то, что вы написали, к моему .emacs, и теперь я получаю: Error (flymake): Flymake: Configuration error has occurred while running (tidy captcha_flymake.html). Flymake will be switched OFF . - person DJG; 18.06.2013
comment
tidy действительно установлен. Есть ли что-нибудь еще, что я могу проверить? - person DJG; 27.06.2013
comment
Я предполагаю, что это соответствующая строка: switched OFF Flymake mode for buffer abc.html due to fatal status CFGERR, warning Configuration error has occurred while running (tidy abc_flymake.html) - person DJG; 30.06.2013

Программа по умолчанию, которую flymake должен использовать (xml), не установлена ​​на вашем компьютере, или ее расположение не указано на вашем пути. Вам нужно указать flymake использовать другую программу проверки синтаксиса, как сказал @wvxvw (см. их ответ для кода).

Однако, когда вы изменяете средство проверки синтаксиса, вам также может понадобиться сообщить flymake, как новое средство проверки будет выводить сообщения об ошибках, иначе flymake не будет знать, как читать вывод средства проверки.

Если ваша новая программа проверки имеет код выхода, отличный от 0 (что обычно указывает на ошибку) И flymake не увидел ничего, что было бы распознано как текст ошибки, тогда flymake выдаст CFGERR и выключится.

Из руководства flymake:

Следующие ошибки вызывают предупреждающее сообщение и отключают режим flymake для буфера.

CFGERR : процесс проверки синтаксиса возвратил ненулевой код выхода, но никаких ошибок/предупреждений не поступало. Это указывает на возможную ошибку конфигурации (например, нет подходящих шаблонов сообщений об ошибках для инструмента проверки синтаксиса).

Итак, что вам нужно сделать, это сообщить flymake, как интерпретировать ошибки вашего обновленного парсера. Вы делаете это, добавляя регулярное выражение в список, который flymake будет сравнивать с выводом вашего синтаксического анализатора. Добавьте что-то вроде этого в ваш файл .emacs:

(add-to-list
    `flymake-err-line-patterns
    '("at line \\([0-9]+\\) of \"\\([^ \n]+\\)\"$" 2 1 nil))

Затем это сообщит flymake, что если ваш синтаксический анализатор генерирует вывод, соответствующий регулярному выражению ("at line \\([0-9]+\\) of \"\\([^ \n]+\\)\"$"), он идентифицирует его как сообщение об ошибке. 2 1 nil сообщает flymake, какая группа в регулярном выражении представляет файл, номер строки и номер столбца соответственно. Если сообщение об ошибке не предоставляет эту информацию, установите для этого параметра значение nil. В этом примере сообщение об ошибке идентифицирует только файл (вторая группа) и номер строки (первая группа), поэтому для столбца установлено значение nil.

person Matt Klein    schedule 16.09.2013