2010-04-03 9 views
14

tengo las siguientes líneas en mi ~/.emacs.d/init.elEmacs: cuadro de diálogo Flymake molesto

(custom-set-variables 
    '(flymake-allowed-file-name-masks 
    (quote 
     (
     ("\\.cc\\'" flymake-simple-make-init) 
     ("\\.cpp\\'" flymake-simple-make-init))))) 
(add-hook 'find-file-hook 'flymake-find-file-hook) 

Al abrir un archivo de C++ que tiene un Makefile adecuada en la misma carpeta, me subo a la marcha de la compilación y el error informes (Flymake verificará la sintaxis e informará sobre errores y advertencias durante la edición del código).

El Makefile tiene un objetivo check-syntax:

.PHONY: check-syntax 
check-syntax: 
$(CXX) -Wall -Wextra -pedantic -fsyntax-only $(CHK_SOURCES) 

El problema es que cuando abro un archivo .cc que no tiene un Makefile correspondiente recibo un cuadro de diálogo molesto que me advierte sobre flymake ser discapacitados.

Así que si lanzo emacs *.cc en una carpeta con archivos 20 C++ me sale 20 modales cuadros de diálogo diciendo algo como No hay resultados para BuildFile [...]. Flymake se apagará.

¿Hay algún gancho que pueda usar para desactivar esa advertencia? ¿Puedes proporcionar un ejemplo de código elisp y una explicación sobre cómo encontraste el gancho adecuado?

Respuesta

14

La forma más sencilla de hacer esto, y aún recibir los mensajes, es dejar la variable de personalización establecida en verdadero y redefinir la función flymake-display-warning.

;; Overwrite flymake-display-warning so that no annoying dialog box is 
;; used. 

;; This version uses lwarn instead of message-box in the original version. 
;; lwarn will open another window, and display the warning in there. 
(defun flymake-display-warning (warning) 
    "Display a warning to the user, using lwarn" 
    (lwarn 'flymake :warning warning)) 

;; Using lwarn might be kind of annoying on its own, popping up windows and 
;; what not. If you prefer to recieve the warnings in the mini-buffer, use: 
(defun flymake-display-warning (warning) 
    "Display a warning to the user, using lwarn" 
    (message warning)) 
+3

Anularía la función con 'defadvice' en lugar de' defun', ya que el primero declara explícitamente su intención de anular la función, y también funciona incluso si flymake se vuelve a cargar más tarde. –

+0

ya que eso no sería exactamente equivalente (es decir, 's/defun/defadvice /' no es suficiente), ¿puedes publicarlo como respuesta @RyanThompson – ocodo

11

Hay una variable que se puede personalizar y que pasé por alto.

flymake-gui-warnings-enabled

Esto desactivará cualquier mensaje de interfaz gráfica de usuario, pero estaré bien con él si nadie va a publicar una respuesta mejor.

+2

Parece que esto deshabilita todas las advertencias/mensajes de error de flymake. La mejor manera sería mostrar los mensajes en minibúfer. – RNA

Cuestiones relacionadas