¿Por qué * buffer * buffer muestra caracteres de control?


9

Estoy usando el *compilation*búfer para compilar una aplicación C ++ en Centos 5 y Centos 6. El búfer muestra la compilación e incluye referencias a archivos que forman parte de la compilación. Sin embargo, obtengo caracteres de control como ^[aparecen en la salida y es difícil de leer y emacs está corrompiendo los nombres de archivo cuando hace clic en uno en la salida. Creo que estos personajes son algún tipo de color u otra anotación en la salida del compilador, pero no sé de dónde vienen. Aquí está la salida de muestra:

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

¿Cómo puedo deshacerme de la salida sin texto en mi búfer de compilación?


1
Se parecen al color VT100 y a los escapes de formato. Puede intentar deshabilitar los colores pasando -fdiagnostics-color=nevera gcc(suponiendo que gccsea ​​su cc)
PythonNut

Como ansi-color-apply-on-regionpodría ser lento, escribí este fragmento hace unas semanas: de-ansi.el . No tenía la intención de que fuera un paquete y, por lo tanto, depende del paquete de acordes clave y de mi modo menor temporal temp-mode.el . También debe estar en emacs 24.4 o posterior para la función de notificación de archivos.
Kaushal Modi

Respuestas:


14

Estas son secuencias de escape que el terminal debe interpretar como órdenes para cambiar el color del texto. Normalmente no deberían usarse cuando el compilador se invoca desde Emacs (el tipo de terminal debe establecerse en dumb, lo que debería hacer que el compilador se abstenga de usar cualquier secuencia de escape). Puede haber algo mal en su configuración que haga que los colores se usen cuando no deberían. Pero puede hacer que Emacs reconozca las secuencias de escape con el paquete ansi-color .

Algo como esto debería hacer que los búferes de compilación manejen secuencias de escape ANSI en lugar de mostrarlas como cadenas sin formato.

(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)

1
Extremadamente útil. Funciona en Emacs 26.1.
Lalylulelo

1
Esto vuelve a colorear todo el búfer cada vez que se ejecuta (y resultó en colorear todo el texto con el último color de primer plano para mí). Este enlace establece "compilación-filtro-inicio" al comienzo de la región insertada con el punto movido al final. Así que usaría esos en lugar de (point-min) y (point-max).
gct
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.