*コンパイル*バッファに制御文字が表示されるのはなぜですか?


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=neverためにgcc(つまり、と仮定しgcc、あなたのあるcc
PythonNut

以下のようansi-color-apply-on-regionに遅くなる可能性があり、私がこれを書いた数週間前にスニペット:デansi.elを。パッケージにするつもりはなかったので、キーコードパッケージと一時マイナーモードtemp-mode.elに依存しています。また、ファイル通知機能を使用するには、emacs 24.4以降が必要です。
Kaushal Modi、2015

回答:


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

1
これにより、バッファが実行されるたびにバッファ全体の色が変更されます(すべてのテキストが最後の前景色に色付けされます)。このフックは、「compilation-filter-start」を、ポイントが末尾に移動した状態で挿入された領域の先頭に設定します。(point-min)と(point-max)の代わりにそれらを使用します。
gct
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.