Warum zeigt der * Kompilierungspuffer * Steuerzeichen an?

9

Ich verwende den *compilation*Puffer, um eine C ++ - Anwendung unter Centos 5 und Centos 6 zu erstellen. Der Puffer zeigt den Build und enthält Verweise auf Dateien, die Teil des Builds sind. Ich erhalte jedoch Steuerzeichen wie ^[in der Ausgabe und es ist schwer zu lesen und Emacs erhält beschädigte Dateinamen, wenn Sie in der Ausgabe auf eines klicken. Ich denke, diese Zeichen sind eine Art Färbung oder eine andere Anmerkung in der Compiler-Ausgabe, aber ich weiß nicht, woher sie kommen. Hier ist eine Beispielausgabe:

cc -c -g -I../machind -I. -DRELEASE_VERSION -g -O2 -m64 -D__BITS64 -pipe -DARCH_64 -DARCH_INTEL -DARCH_X86 -DARCH_X86_64 -DOS_LINUX -pthread -DLM_INTERNAL -DFLEXLM_KITBUILD -DFLEX_STATIC -DRELEASE_VERSION -DGPLATFORM=\\"x64_lsb\\" -DLINUX -DLSB3_0 -D__FD_SETSIZE=65535 -DGLIBC -DLINUX64 -DAMD64 -DREDHAT -DREL -DRHLINUX64 -DPLATFORM_AMD64_RHLINUX   -DNO_ACTIVATION_SUPPORT ../machind/lmcrypt.c
^[[01m^[[K../machind/lmcrypt.c:^[[m^[[K In function  ^[[01m^[[Kmain^[[m^[[K :
^[[01m^[[K../machind/lmcrypt.c:156:47:^[[m^[[K ^[[01;35m^[[Kwarning: ^[[m^[[Kcast to pointer from integer of different size [-Wint-to-pointer-cast]
     lc_set_attr(lm_job, LM_A_MAX_LICENSE_LEN, (LM_A_VAL_TYPE)max);
^[[01;32m^[[K                                               ^^[[m^[[K

Wie kann ich die Nicht-Textausgabe in meinem Kompilierungspuffer entfernen?

WilliamKF
quelle
1
Diese sehen aus wie VT100. Farb- und Formatierungsprobleme. Sie könnten versuchen , Farben zu deaktivieren , indem -fdiagnostics-color=neverauf gcc(dh unter der Annahme , gccIhr cc)
PythonNut
Da das ansi-color-apply-on-regionlangsam sein könnte, habe ich vor ein paar Wochen diesen Ausschnitt geschrieben: de-ansi.el . Ich hatte nicht vor, dass es sich um ein Paket handelt, und daher hängt es vom Key-Chords-Paket und von meinem temporären Moll-Modus temp-mode.el ab . Sie müssen außerdem Emacs 24.4 oder höher verwenden, um die Dateibenachrichtigungsfunktion nutzen zu können.
Kaushal Modi

Antworten:

14

Dies sind in der Tat Escape-Sequenzen, die das Terminal als Befehle zum Ändern der Textfarbe interpretieren sollte. Normalerweise sollten sie nicht verwendet werden, wenn der Compiler von Emacs aus aufgerufen wird (der Terminaltyp sollte auf gesetzt sein dumb, was dazu führen sollte, dass der Compiler keine Escape-Sequenz verwendet). Möglicherweise stimmt etwas in Ihrer Konfiguration nicht, was dazu führt, dass Farben verwendet werden, wenn dies nicht der Fall sein sollte. Mit dem ansi-color- Paket können Sie Emacs jedoch dazu bringen, die Escape-Sequenzen zu erkennen .

So etwas sollte dazu führen, dass Kompilierungspuffer ANSI-Escape-Sequenzen verarbeiten, anstatt sie als unformatierte Zeichenfolgen anzuzeigen.

(require 'ansi-color)
(defun my/ansi-colorize-buffer ()
  (let ((buffer-read-only nil))
    (ansi-color-apply-on-region (point-min) (point-max))))
(add-hook 'compilation-filter-hook 'my/ansi-colorize-buffer)
François Févotte
quelle
1
Extrem nützlich. Arbeitet in Emacs 26.1.
Lalylulelo
1
Dadurch wird der gesamte Puffer bei jeder Ausführung neu eingefärbt (und der gesamte Text wird für mich auf die letzte Vordergrundfarbe eingefärbt). Dieser Hook setzt "Compilation-Filter-Start" auf den Anfang des eingefügten Bereichs, wobei der Punkt zum Ende verschoben wird. Also würde ich diese anstelle von (point-min) und (point-max) verwenden.
gct