2012-11-15 13 views
27

コンパイルモードのEmacsでansi-colorのサポートを追加した人はいますか?そうであれば、アクティブな端末がANSIエスケープカラーリングをサポートしていることを確認するために、カラーライティングプログラムがチェックする必要があるプロパティ/属性は何ですか?ANSIコンパイルモードでの色付け

+2

[キュウリのANSIの色はEmacsのコンパイルバッファをめちゃくちゃ]の可能複製(http://stackoverflow.com/questions/3072648/cucumbers-ansi-colour-messing-up-emacs-compilation-buffer) – legoscia

答えて

41

すでにcomintバッファに色を適用する機能があります。あなたは、単にコンパイルバッファでそれを有効にする必要があります

(require 'ansi-color) 
(defun colorize-compilation-buffer() 
    (toggle-read-only) 
    (ansi-color-apply-on-region compilation-filter-start (point)) 
    (toggle-read-only)) 
(add-hook 'compilation-filter-hook 'colorize-compilation-buffer) 

カラーライティングプログラムは、端末が色をサポートしているかどうかを確認するためにTERM環境変数やterminfoデータベースをチェックする必要があります。実際には、多くのプログラムがこれを無視し、ユーザー設定に依存しています。 Emacsはデフォルトでコンパイルターミナルタイプをdumbに設定しますが、これはcompilation-environment変数を設定することでオーバーライドできます。

+0

完全には動作しないようです。私は 'grep --color'でテストしました。 Emacsは常にANSIの制御シーケンスを無効にするとは限りません。( –

+1

@Nordlöw、この問題を修正してポストを更新しました。バッファ全体を色づけしようとしましたが、新しいバージョンははるかに堅牢で高速ですが、エスケープシーケンスの途中でプロセスが出力をカットしないことは保証されていないので、混乱する可能性があります。 – ivg

+0

ありがとうございました。 –

22

(のみM-x compile用)M-x grepを汚染していない私の最適化されたソリューション:

(ignore-errors 
    (require 'ansi-color) 
    (defun my-colorize-compilation-buffer() 
    (when (eq major-mode 'compilation-mode) 
     (ansi-color-apply-on-region compilation-filter-start (point-max)))) 
    (add-hook 'compilation-filter-hook 'my-colorize-compilation-buffer)) 
+1

ありがとうございました!上記の回答のようなものを使用していたとき、rgrepバッファが赤いフォントで表示されていました。 emacsを使用する24.3.50.1。 – sockmonk

+2

これはより良い解決策のようです。 'compilation-filter-start'を使うと、すべてのベットを色づけするよりもはるかに効率的です毎回ween '(point-min)'と '(point-max)'を実行します。 – mgalgs

+1

この作業をするには、コンパイル環境変数をTERM = xterm-256colorに設定する必要がありました。 –

関連する問題