2009-05-13 7 views
5

Tengo una página HTML, con html-mode activado. Llamo a la función sgml-validate para comprobar si hay algún error de marcado. Se basa en compilation-mode. Quiero eliminar algunas advertencias de la salida de compilación, así que escribí una función y la conecté al compilation-filter-hook (esta variable no está documentada, pero compilation-filter la invoca). Todo funciona. Mi problema es que ¿cómo puedo asegurar que mi función de filtro solo se llame cuando comencé el proceso de compilación en una página HTML (a través de sgml-validate)?¿Cómo puedo filtrar la salida de compilación solo para un modo específico o buffer en Emacs?

veo dos métodos, pero ninguno de ellos trabajaron:

  • En primer lugar, se puede comprobar el valor de major-mode. Pero siempre devuelve compilation-mode, ya que está habilitado en el buffer *compilation*. (Encontré una función de filtro en el source code of grep+, y comprobaron el valor de major-mode. No puedo entender cómo puede funcionar correctamente.)
  • La otra idea era que solo conectar mi función de filtro al archivo HTML buffer, pero por razones similares no podría funcionar ya que el resultado del proceso de compilación va a un buffer separado.

Respuesta

1

Parece que usted puede aconsejar SMGL-validación para que realice el filtrado antes de que realice todo lo que es otras operaciones. Por ejemplo:

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

Gracias, le echo un vistazo. En mi caso, creo que debería usar un consejo de acercamiento, porque quiero filtrar el resultado generado, y aún necesito el nombre del buffer de compilación que devuelve 'sgml-validate'. –

+0

En ese caso, después de asesorar puede ser lo que necesita en lugar de asesoramiento general, a menos que necesite realizar operaciones antes y después de la llamada a sgml-validate. –

+0

¿Pero puedo obtener el valor de retorno 'of' sgml-validate' cuando uso after-advise? Me dice el nombre del búfer de compilación; de lo contrario, no puedo ejecutar la función de filtro en la salida. –

1

Mientras tanto, he encontrado que compilation-start acepta un argumento opcional mode, que será el modo mayor para el búfer de compilación. Así que puedo crear un modo principal derivado de compilation-mode, y definir allí mi función de filtro ahora enganchada al buffer apropiado.

El único problema ahora es que sgml-validate no me permite establecer el argumento mode en , pero esa es otra pregunta.

(no considero esta la solución final, por supuesto.)

Cuestiones relacionadas