Как отключить Emacs-Flymake для html-режима

Вот мои настройки flymake в файле .emacs:

 (when (load "flymake" t) 
         (defun flymake-pyflakes-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 "pyflakes" (list local-file)))) 

         (add-to-list 'flymake-allowed-file-name-masks 
                  '("\\.py\\'" flymake-pyflakes-init))) 

   (add-hook 'find-file-hook 'flymake-find-file-hook)
(load-library "flymake-cursor")

Я хочу использовать flymake только для файлов .py. и отключите его для остальных. но он всегда включен. Например, когда я открываю html-файл, я всегда получаю следующую ошибку. Ошибка (flymake): Flymake: не удалось запустить процесс проверки синтаксиса «xml» с аргументами (val /home/huseyin/vipsatis/templates/cancellation/base_flymake.html): Поиск для программы: нет такого файла или каталога, xml. Flymake будет выключен

Поэтому я хочу отключить его для всего, кроме файлов py. Является ли это возможным?

(Для людей, имеющих ту же проблему, я хочу объяснить сообщение об ошибке: Flymake использует xmlstarlet для проверки xml и html. И он пытается вызвать его как «xml val ......», но он должен называть его как "xmlstarlet val....", чтобы исправить это, вам нужно найти файл flymake.el и изменить вызов xml на xmlstarlet. )


person yilmazhuseyin    schedule 04.11.2010    source источник
comment
Я выполнил все приведенные ниже предложения безрезультатно. Режим Flymake по-прежнему активен в моих html-буферах, что очень раздражает, когда я использую теги django. Какие-нибудь советы? Я на Snow Leopard с emacs24.   -  person jrhorn424    schedule 22.02.2012


Ответы (4)


Удалите запись HTML из списка:

(delete '("\\.html?\\'" flymake-xml-init) flymake-allowed-file-name-masks)
person hekevintran    schedule 29.05.2011
comment
Когда я пытаюсь это сделать, я получаю сообщение об ошибке Symbol's value as variable is void: flymake-allowed-file-name-masks - person Amelio Vazquez-Reina; 11.01.2013
comment
Хотя я точно не знаю, почему, размещение строки в конце .emacs не приведет к ошибке. - person RNA; 30.01.2013
comment
@RNA Вероятно, это потому, что flymake-allowed-file-name-masks не существует, пока загрузка пакета flymake не создаст его. Поместив команду удаления в конец файла .emacs, вы даете пакету время для создания списка. - person Ashton Wiersdorf; 28.01.2020

Ладно, я понял. вот что я сделал: прежде всего я нашел файл flymake.el. (Если у вас его нет, у вас, вероятно, есть файл flymake.elc при установке emacs. В этом случае просто скопируйте файл flymake.el под ваш путь загрузки, чтобы он был используется вместо скомпилированной версии (файл .elc) при установке). чем я нашел следующую функцию и прокомментировал привязки .xml и .html.

(defcustom flymake-allowed-file-name-masks
  '(("\\.\\(?:c\\(?:pp\\|xx\\|\\+\\+\\)?\\|CC\\)\\'" flymake-simple-make-init)
    ;("\\.xml\\'" flymake-xml-init)
    ;("\\.html?\\'" flymake-xml-init)
    ("\\.cs\\'" flymake-simple-make-init)
    ("\\.p[ml]\\'" flymake-perl-init)
    ("\\.php[345]?\\'" flymake-php-init)
    ("\\.h\\'" flymake-master-make-header-init flymake-master-cleanup)
    ("\\.java\\'" flymake-simple-make-java-init flymake-simple-java-cleanup)
    ("[0-9]+\\.tex\\'" flymake-master-tex-init flymake-master-cleanup)
    ("\\.tex\\'" flymake-simple-tex-init)
    ("\\.idl\\'" flymake-simple-make-init)
    ;; ("\\.cpp\\'" 1)
    ;; ("\\.java\\'" 3)
    ;; ("\\.h\\'" 2 ("\\.cpp\\'" "\\.c\\'")
    ;; ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2))
    ;; ("\\.idl\\'" 1)
    ;; ("\\.odl\\'" 1)
    ;; ("[0-9]+\\.tex\\'" 2 ("\\.tex\\'")
    ;; ("[ \t]*\\input[ \t]*{\\(.*\\)\\(%s\\)}" 1 2 ))
    ;; ("\\.tex\\'" 1)
    )

Другие строки комментария уже были там. Теперь flymake не работает с html и xml файлами.

person yilmazhuseyin    schedule 04.11.2010
comment
вам не нужно изменять файл .el, чтобы это произошло. вы можете просто установить переменную в своем собственном emacs.el (или эквивалентном). - person Cheeso; 07.11.2010
comment
поэтому, если я правильно понимаю, я должен поместить код в сообщение в файле emacs.el. поэтому он перезапишет тот, что в файле flymake.el. Я попробую это спасибо. (если я ошибаюсь, поправьте меня) - person yilmazhuseyin; 08.11.2010

В полученном сообщении об ошибке сообщается, что не удается найти средство проверки XML из командной строки xml. Вы можете исправить это, установив совместимый инструмент проверки XML (я думаю, xmllint - правильный выбор).

Но если вы действительно просто хотите отключить Flymake для файлов HTML и XML, вам не нужно копировать весь файл flymake.el и изменять его. Просто добавьте эту строку в свой файл инициализации:

(defun flymake-xml-init ())

Это переопределяет функцию, которую Flymake вызывает для файлов HTML и XML с пустой функцией.

person Mostafa    schedule 08.10.2011
comment
+1 Не знаю, почему за вас проголосовали, это кажется нормальным для отключения других режимов, например, java , хотя мне это не помогло. - person jrhorn424; 22.02.2012
comment
Я использовал (defun flymake-simple-make-init ()) для одновременного отключения всех режимов flymake на основе make. Очень кстати. - person P.T.; 21.05.2012

Настройте переменную с именем flymake-allowed-file-name-masks.

Вы можете сделать это и так:

M-x customize-variable RET

flymake-allowed-file-name-masks RET
person ustun    schedule 20.09.2012