2010-04-03 2 views
14

ho le seguenti righe nel mio ~/.emacs.d/init.elEmacs: fastidiosa finestra di dialogo Flymake

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

Quando ho aperto il file ++ che ha una vera e propria Makefile nella stessa cartella di una C, ottengo on-the-fly di compilazione e l'errore segnalazione (Flymake controllerà la sintassi e segnalerà errori e avvisi durante la modifica del codice).

Il Makefile ha un target check-syntax:

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

Il problema è che quando apro un file .cc che non ha Makefile corrispondente ottengo una finestra di dialogo fastidioso che mi mette in guardia circa flymake essere disattivato.

Quindi, se io lancio emacs *.cc in una cartella con i file 20 C++ ottengo 20 finestre di dialogo modali dicendo qualcosa come Nessun BuildFile trovato per [...]. Flymake verrà disattivato.

C'è qualche aggancio che posso usare per disabilitare quell'avvertimento? Puoi fornire un codice elisp di esempio su come hai trovato il gancio giusto?

risposta

14

Il modo più semplice per eseguire questa operazione e ricevere i messaggi è lasciare la variabile di personalizzazione impostata su true e ridefinire la funzione di avvertenza display flymake.

;; 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

Escludo la funzione con 'defadvice' piuttosto che' defun', dal momento che il primo dichiara esplicitamente l'intenzione di ignorare la funzione, e funziona anche se flymake viene ricaricato in seguito. –

+0

in quanto non sarebbe esattamente equivalente (ad es. 'S/defun/defadvice /' non è sufficiente), puoi postarlo come risposta @RyanThompson – ocodo

11

C'è una variabile che può essere personalizzata e che ho trascurato.

flymake-gui-warnings-enabled

Questo disabiliterà qualsiasi messaggio GUI, ma starò bene con esso se nessuno pubblicherà una risposta migliore.

+2

sembra questo disabilita tutti i messaggi di avviso/errore da flymake. Il modo migliore sarebbe mostrare i messaggi in minibuffer. – RNA