2009-05-13 14 views
5

Mam stronę HTML z włączoną html-mode. Wywołuję funkcję sgml-validate, aby sprawdzić, czy nie występują błędy znaczników. Opiera się na compilation-mode. Chcę usunąć niektóre ostrzeżenia z wyjścia kompilacji, więc napisałem funkcję i podłączyłem ją do compilation-filter-hook (ta zmienna nie jest udokumentowana, ale wywołuje ją compilation-filter). Wszystko działa poprawnie. Mój problem polega na tym, że w jaki sposób mogę zagwarantować, że funkcja filtru zostanie wywołana dopiero po uruchomieniu procesu kompilacji na stronie HTML (przez sgml-validate)?Jak mogę filtrować dane wyjściowe kompilacji tylko dla określonego trybu lub bufora w Emacs?

Widzę dwa sposoby, ale żaden z nich nie pracował:

  • Po pierwsze, mogę sprawdzić wartość major-mode. Ale zawsze zwraca compilation-mode, ponieważ jest włączona w buforze *compilation*. (Znalazłem funkcję filtru w source code of grep+ i sprawdzono wartość major-mode. Nie mogę się dowiedzieć, jak to działa poprawnie.)
  • Innym pomysłem było tylko podpięcie funkcji filtra do pliku HTML bufor, ale z podobnych powodów nie mógł działać, ponieważ wynik procesu kompilacji przechodzi do oddzielnego bufora.

Odpowiedz

1

Brzmi jak można doradzić Smgl-validate tak, że wykonuje filtrowanie przed wykonuje wszystko to pozostałe operacje. Na przykład:

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

Dzięki, przyjrzę się temu. W moim przypadku wydaje mi się, że powinienem użyć polecenia near-advise, ponieważ chcę filtrować wygenerowane dane wyjściowe i nadal potrzebuję nazwy bufora kompilacji zwracanej przez 'sgml-validate'. –

+0

W takim przypadku po udzieleniu porady może być to, czego potrzebujesz, zamiast doradzać - chyba że musisz wykonać operacje zarówno przed, jak i po zakończeniu sprawdzania sgml. –

+0

Ale czy mogę uzyskać wartość zwracaną '' 'sgml-validate' przy korzystaniu z pouczenia? Informuje mnie o nazwie bufora kompilacji, w przeciwnym razie nie będę w stanie uruchomić funkcji filtru na wyjściu. –

1

Tymczasem okazało się, że compilation-start przyjmuje opcjonalny argument mode, który będzie głównym sposobem dla bufora kompilacji. Mogę więc stworzyć tryb główny wyprowadzony z compilation-mode i zdefiniować tam moją funkcję filtrowania teraz podłączoną do odpowiedniego bufora.

Jedynym problemem jest to, że sgml-validate nie pozwala ustawić argumentu na compilation-start, ale to kolejne pytanie.

(nie uważam, to najlepszym rozwiązaniem, oczywiście.)