* 컴파일 * 버퍼가 제어 문자를 표시하는 이유는 무엇입니까?


9

*compilation*버퍼를 사용하여 Centos 5 및 Centos 6에서 C ++ 애플리케이션을 빌드하고 있습니다. 버퍼는 빌드를 표시하고 빌드의 일부인 파일에 대한 참조를 포함합니다. 그러나 ^[출력에 나타나는 것과 같은 제어 문자가 표시되며 읽기가 어렵고 출력에서 ​​파일 이름을 클릭하면 emacs가 손상된 파일 이름을 얻습니다. 이 문자는 컴파일러 출력의 색상이나 다른 주석이라고 생각하지만 어디에서 왔는지 모르겠습니다. 다음은 샘플 출력입니다.

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

컴파일 버퍼에서 비 텍스트 출력을 제거하려면 어떻게해야합니까?


1
VT100 색상 및 서식 이스케이프처럼 보입니다. 당신은 전달하여 색상을 사용하지 않도록 시도 할 수 -fdiagnostics-color=nevergcc(즉 가정하는 것은 gcc당신입니다 cc)
PythonNut

(가)로 ansi-color-apply-on-region: 느린 될 수있다, 나는이 다시 몇 주 니펫을 최대 작성한 드 ansi.el을 . 나는 그것이 패키지가되도록 의도하지 않았으므로 키 코드 패키지와 임시 마이너 모드 temp-mode.el에 의존합니다 . 파일 알림 기능을 사용하려면 emacs 24.4 이상에 있어야합니다.
Kaushal Modi 2019

답변:


14

이들은 실제로 터미널이 텍스트 색상을 변경하기위한 명령으로 해석해야하는 이스케이프 시퀀스입니다. 일반적으로 컴파일러는 Emacs에서 호출 될 때 사용되지 않아야합니다 (터미널 유형은로 설정되어야하며 dumb, 이로 인해 컴파일러는 이스케이프 시퀀스를 사용하지 않아야합니다). 구성에 색상이 사용되지 않아야 할 때 색상이 잘못 될 수 있습니다. 그러나 Emacs가 ansi-color 패키지를 사용하여 이스케이프 시퀀스를 인식하도록 할 수 있습니다 .

이런 식으로 컴파일 버퍼가 원시 이스케이프 시퀀스를 처리하는 대신 ANSI 이스케이프 시퀀스를 처리해야합니다.

(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
매우 유용합니다. Emacs 26.1에서 작동합니다.
Lalylulelo

1
이것은 실행될 때마다 전체 버퍼를 다시 채색합니다 (그리고 모든 텍스트를 마지막 전경색으로 채색했습니다). 이 후크는 "compilation-filter-start"를 끝으로 이동 한 지점이 삽입 된 영역의 시작으로 설정합니다. 그래서 (point-min) 및 (point-max) 대신에 그것들을 사용합니다.
gct
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.