web-dev-qa-db-ja.com

どのモードのemacsでもANSIカラーコードを表示するにはどうすればよいですか?

ANSIエスケープカラーコードを使用してテキストをフォーマットするログファイルがあります。モードはfundamentalです。この問題に対処する他の回答済みの質問がありますが、このモードまたは他のモードに適用する方法がわかりません。このソリューションは、何らかの方法でansi-colorを構成することに関係していることを私は知っています。

24
Avery

以下のコードを使用できます

(require 'ansi-color)
(defun display-ansi-colors ()
  (interactive)
  (ansi-color-apply-on-region (point-min) (point-max)))

次に、M-x、選択したキーバインディング、またはプログラムによる条件(ログファイルの拡張子または名前が正規表現と一致する場合があります)を介してdisplay-ansi-colorsを実行できます。

読み取り専用バッファー(ログファイル、grep結果)でこれを実行する場合は、inhibit-read-onlyを使用できるため、関数は次のようになります。

(defun display-ansi-colors ()
  (interactive)
  (let ((inhibit-read-only t))
    (ansi-color-apply-on-region (point-min) (point-max))))
45
juanleon

GavenkoaとJuanleonのソリューションは私にとってはうまくいきましたが、私が読んでいたファイルの内容を変更していたため、満足のいくものではありませんでした。

ファイルの内容を変更せずに色付けするには、 tty-format.el をダウンロードし、.emacsに以下を追加します。

(add-to-list 'load-path "path/to/your/tty-format.el/")

(require 'tty-format)

;; M-x display-ansi-colors to explicitly decode ANSI color escape sequences                                                                                                                                        
(defun display-ansi-colors ()
  (interactive)
  (format-decode-buffer 'ansi-colors))

;; decode ANSI color escape sequences for *.txt or README files                                                                                                                                                    
(add-hook 'find-file-hooks 'tty-format-guess)

;; decode ANSI color escape sequences for .log files                                                                                                                                                               
(add-to-list 'auto-mode-alist '("\\.log\\'" . display-ansi-colors))

tty-formatは、最近のバージョンのemacsでのみネイティブに出荷されるansi-color.elに基づいています。

7
deb0ch

ユーザー定義関数:

(defun my-ansi-color (&optional beg end)
  "Interpret ANSI color esacape sequence by colorifying cotent.
Operate on selected region on whole buffer."
  (interactive
   (if (use-region-p)
       (list (region-beginning) (region-end))
     (list (point-min) (point-max))))
  (ansi-color-apply-on-region beg end))

コンパイル/コンパイルを使用するバッファーの場合、フィルターを使用します。

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