为什么“编译”缓冲区显示控制字符?


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 2015年

由于ansi-color-apply-on-region速度可能很慢,所以几周前我已经编写了以下代码段:de-ansi.el。我不打算将其作为软件包,因此它与key-chords软件包以及我的临时次要模式temp-mode.el有依赖关系。您还需要使用emacs 24.4或更高版本才能使用文件通知功能。
Kaushal Modi,

Answers:


14

这些确实是转义序列,终端应将其解释为更改文本颜色的命令。通常,从Emacs调用编译器时,不应使用它们(终端类型应设置为dumb,这将导致编译器避免使用任何转义序列)。您的配置中可能存在错误,导致不应该使用颜色。但是,您可以使用ansi-color软件包使Emacs识别转义序列。

这样的事情应该使编译缓冲区处理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)。
gct19年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.