2009-05-13 20 views
5

Ho una pagina HTML, con html-mode abilitato. Chiamo la funzione sgml-validate per verificare eventuali errori di markup. È basato su compilation-mode. Voglio rimuovere alcuni avvisi dall'output della compilation, così ho scritto una funzione e l'ho agganciata a compilation-filter-hook (questa variabile non è documentata, ma compilation-filter la invoca). Tutto funziona. Il mio problema è che come posso garantire che la funzione filtro venga richiamata solo quando ho avviato il processo di compilazione su una pagina HTML (tramite sgml-validate)?Come posso filtrare l'output della compilation solo per una modalità o buffer specifici in Emacs?

vedo due metodi, ma nessuno di loro ha lavorato:

  • In primo luogo, posso controllare il valore di major-mode. Ma restituisce sempre compilation-mode, poiché è abilitato nel buffer *compilation*. (Ho trovato una funzione filtro nello source code of grep+ e hanno verificato il valore di major-mode. Non riesco a capire come funziona correttamente.)
  • L'altra idea era quella di collegare solo la mia funzione filtro al file HTML buffer, ma per ragioni simili non potrebbe funzionare poiché l'output del processo di compilazione passa a un buffer separato.

risposta

1

Sembra che si può consigliare smgl-validate in modo che esegue il filtraggio prima di eseguire tutto è altre operazioni. Ad esempio:

 
(defadvice sgml-validate (around fix-filtering command activate) 
    (let ((return-value ad-do-it)) 
     (filter-function return-value)))) 
+0

Grazie, ho dato un'occhiata. Nel mio caso penso che dovrei usare un around-advise, perché voglio filtrare l'output generato, e ho ancora bisogno del nome del buffer di compilazione che viene restituito da 'sgml-validate'. –

+0

In tal caso, dopo aver consigliato potrebbe essere quello che ti serve invece di consigliare in giro - a meno che non sia necessario eseguire operazioni sia prima che dopo la chiamata a validare sgml. –

+0

Ma posso ottenere il valore restituito 'di' sgml-validate' quando si usa after-advise? Mi dice il nome del buffer di compilazione, altrimenti non sono in grado di eseguire la funzione filtro sull'output. –

1

Nel frattempo, ho scoperto che compilation-start accetta un argomento opzionale mode, che sarà la modalità principale per il buffer di compilazione. Quindi posso creare una modalità principale derivata da compilation-mode e definire lì la mia funzione di filtro ora collegata al buffer appropriato.

L'unico problema è ora che sgml-validate non mi permette di impostare l'argomento mode su compilation-start, ma questa è un'altra questione.

(non ritengo questa la soluzione definitiva, ovviamente.)

Problemi correlati