2012-11-15 10 views
27

Hat jemand Unterstützung für ansi-color im Kompilierungsmodus Emacs hinzugefügt? Wenn ja, nach welcher Eigenschaft/welchem ​​Attribut muss das Farbschreibprogramm suchen, um sicherzustellen, dass sein aktives Terminal die ANSI-Escape-Färbung unterstützt?ANSI Coloring im Kompilierungsmodus

+2

möglich Duplikat [Gurke ANSI-Farben vermasselt Emacs Kompilation Puffer] (http://stackoverflow.com/questions/3072648/gurken-ansi-colors-messing-up-emacs-compilation-buffer) – legoscia

Antwort

41

Es gibt bereits eine Funktion zum Anwenden von Farbe auf Comint-Puffer. Sie müssen lediglich auf Kompilation Puffer aktivieren:

sollte
(require 'ansi-color) 
(defun colorize-compilation-buffer() 
    (toggle-read-only) 
    (ansi-color-apply-on-region compilation-filter-start (point)) 
    (toggle-read-only)) 
(add-hook 'compilation-filter-hook 'colorize-compilation-buffer) 

Farb Schreiben von Programmen, die TERM Umgebungsvariable überprüfen und die terminfo-Datenbank zu überprüfen, ob das Terminal Farbe unterstützt. In der Praxis ignorieren viele Programme dies und verlassen sich auf eine Benutzereinstellung. Emacs setzt den Typ der Kompilationsterminal standardmäßig auf dumb, aber dies kann überschrieben werden, indem die Variable compilation-environment gesetzt wird.

+0

Es scheint nicht vollständig zu funktionieren. Ich habe mit 'grep --color' getestet und manchmal werden größere Regionen eingefärbt, was nicht sein sollte. Es scheint, als ob Emacs nicht immer deaktivieren ANSI-Kontrollsequenzen erkennt :( –

+1

@ Nordlöw, ich habe dieses Problem behoben, und den Post aktualisiert. Die Funktion versuchte, den gesamten Puffer zu färben, obwohl es nur den Chunk filtern sollte Obwohl die neue Version viel robuster und schneller ist, kann sie immer noch verwechselt werden, da es nicht garantiert ist, dass ein Prozess seine Ausgabe nicht mitten in der Escape-Sequenz unterbricht. – ivg

+0

Danke, für die Hilfe. –

22

Meine optimierte Lösung, die nicht M-x grep (nur für M-x compile) verschmutzen:

(ignore-errors 
    (require 'ansi-color) 
    (defun my-colorize-compilation-buffer() 
    (when (eq major-mode 'compilation-mode) 
     (ansi-color-apply-on-region compilation-filter-start (point-max)))) 
    (add-hook 'compilation-filter-hook 'my-colorize-compilation-buffer)) 
+1

Danke! Als ich etwas mehr wie die oben angenommene Antwort verwendet, meine Rgrep-Puffer wurden in einem festen roten Schriftart angezeigt. Ihre Version funktioniert viel besser für mich Mit emacs 24.3.50.1. – sockmonk

+2

Danke, das scheint eine bessere Lösung zu sein, die Verwendung von 'compilation-filter-start' sollte viel effizienter sein, als alles neu zu färben ween '(point-min)' und '(point-max)' jedes Mal. – mgalgs

+1

Um dies zu tun, musste ich die compilation-Umgebungsvariable auf TERM = xterm-256color setzen. –