2010-11-04 10 views
25

Aquí está mi configuración flymake en el archivo .emacs:Cómo deshabilitar Emacs-Flymake para el modo html

(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") 

Quiero usar flymake sólo para archivos .py. y deshabilitarlo para el resto. pero siempre está habilitado. Por ejemplo, cuando abro un archivo html siempre obtengo el siguiente error Error (flymake): Flymake: no se pudo iniciar el proceso de comprobación de sintaxis 'xml' con args (val /home/huseyin/vipsatis/templates/cancellation/base_flymake.html) : Búsqueda de programa: no existe tal archivo o directorio, xml. Flymake se apagará

Así que quiero desactivarlo para cualquier cosa que no sean archivos py. ¿Es posible?

( Para las personas que tienen el mismo problema, quiero explicar el mensaje de error: Flymake usa xmlstarlet para la validación de xml y html. Y trata de llamarlo como "xml val ......" pero tiene que llamarlo como "xmlstarlet val ...." para arreglar esto, tiene que encontrar el archivo flymake.el y cambiar la llamada xml con xmlstarlet. )

+0

He seguido todas las sugerencias a continuación en vano. El modo Flymake todavía está activo en mis búferes html, lo cual es realmente molesto cuando uso las etiquetas django. ¿Algun consejo? Estoy en Snow Leopard ejecutando emacs24. – jrhorn424

Respuesta

23

Retire la entrada HTML de la lista:

(delete '("\\.html?\\'" flymake-xml-init) flymake-allowed-file-name-masks) 
+0

Cuando intento esto, obtengo el error 'El valor del símbolo como variable es nulo: flymake-allowed-file-name-masks' –

+1

Aunque no sé exactamente por qué, poner la línea al final de '.emacs' no tendrá el error. – RNA

6

OK Lo tengo. esto es lo que hice: antes que nada encontré el archivo flymake.el. (Si no lo tienes, probablemente tengas el archivo flymake.elc debajo de la instalación de emacs. En ese caso solo copia el archivo flymake.el debajo de tu ruta de carga para que así sea ser utilizado en lugar de la versión compilada (archivo .elc) bajo insallation). que encontré la función siguiente y enlaces .xml y .html comentados.

(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) 
    ) 

Otras líneas comentadas ya estaban allí. Ahora flymake no funciona para archivos HTML y XML

+1

no tiene que modificar el archivo .el para que esto suceda. simplemente puede establecer la variable en su propio emacs.el (o equivalente). – Cheeso

+0

así que si entiendo bien, tengo que poner el código en la publicación en el archivo emacs.el. por lo que sobrescribirá el que está en el archivo flymake.el. Voy a intentarlo gracias. (Si me equivoco, por favor corrígeme) – yilmazhuseyin

3

En el mensaje de error que recibe está diciendo que no puede encontrar la herramienta de validación de XML de línea de comandos xml. Puede solucionarlo instalando una herramienta de validación XML compatible (supongo que es xmllint).

Pero si realmente desea deshabilitar Flymake para archivos HTML y XML, no tiene que copiar todo el archivo flymake.el y cambiarlo. Basta con añadir esta línea a su archivo de inicio:

(defun flymake-xml-init()) 

Esto anula la función que llama Flymake para archivos HTML y XML con una función vacía.

+1

+1 No estoy seguro de por qué estaba downvoted, esto parece normal para deshabilitar otros modos [como java] (https://github.com/mostafah/conf/commit/1e4c545d3d83372a25c8649cc222a529f7e4a78e), a pesar de que no funcionó para mí. – jrhorn424

+0

He usado '(defun flymake-simple-make-init())' para desactivar todos los modos flymake basados ​​en make a la vez. Muy útil. –

2

Personalice la variable llamada flymake-allowed-file-name-masks.

Usted puede hacerlo de esta manera también:

M-x customize-variable RET 

flymake-allowed-file-name-masks RET 
Cuestiones relacionadas