2009-08-09 7 views
3

Ich habe einen asynchronen Prozess in Emacs, der eine TAGS-Datei erstellt.Wie erstellt man einen Puffer ähnlich wie * Kompilierung * in Emacs?

Dieser Prozess erstellt einen Prozesspuffer namens * ctags *. Wenn das Prozessergebnis "fertig \ n" ist, töte ich den Puffer.

Wenn das Prozessergebnis etwas anderes ist, möchte ich den Prozesspuffer ähnlich der * Kompilierung * Statusausgabe anzeigen, wenn M-x kompiliert wird.

I.e. Ich möchte den Bildschirm vertikal teilen und den * ctags * Puffer unten anzeigen. Drücken q würde vorzugsweise kill den unteren Puffer und nur meine ursprünglichen Puffer anzeigen.

Ich habe versucht, diesen Rückruf in meinem Prozess Sentinel mit:

 
(split-window-vertically) 
(set-window-buffer (selected-window) (get-buffer "*ctags*")) 

aber abgesehen von der Tatsache, dass es die * ctags * buffer oben setzt, wird der Puffer nicht die gleichen Eigenschaften wie die * Kompilation hat * Ausgabe, z Drücken q Einsätze q.

Wie erstelle ich einen Puffer wie * Kompilierung *?

EDIT:

Inspiriert von Trey Jacksons Antwort unten, das ist genau das, was ich will:

 
(pop-to-buffer (get-buffer "*ctags*")) 
(compilation-mode) 

Er wählt die * ctags * buffer, legt es in Kompilierungsmodus und q wird das Fenster verlassen.

EDIT2: Mit

(compilation-mode)
(Dur statt Moll-Modus), da Emacs irgendwie nicht den kleinen Modus in einen exisiting Puffer mögen erneute Anwendung.

Die Fehlermeldung, die ich bekommen ist:

 
Toggling compilation-minor-mode off; better pass explicit argument. 

Antwort

5

Um das Verhalten des *compilation* Puffer zu erhalten, fügen Sie diese zu Ihrem Skript:

(compilation-mode) 
+1

Großartig! Genau das, was ich brauchte. Der Vollständigkeit halber funktioniert (Compilation-Minor-Mode) auch. – cschol

2

Es ist besser, Ihren eigenen Modus von compilation- abzuleiten Modus, und definieren Fehler Regex, etc.

+0

Können Sie auf ein Beispiel näher eingehen? – cschol