Emacsでテキストに色を付ける方法は?

Emacsでテキストに色を付ける方法は?

たとえば、Emacsでカラーテキストを表示または編集したいとしますls -l --color=alwaystree...

私が引用したテキストがファイルに存在します。 Emacsでファイルを開くときに色を見たり、ANSI(SGR)エスケープシーケンスを表示するように切り替えたいです。

ansi-color.el 〜らしい必要な操作を実行しようとしていますが、ANSIエスケープの色を指定することはできません。注文が、個人には青い太字のフォントが表示されます。制御バイト(例:^Aおよび^[)...これがの機能かどうかはわかりませんが、ansi-colorそうです。

~によるとansi-color.el コメント、文字列と領域で動作しますが、それでも動作しないようです。たとえば、機能がansi-color-apply-on-region認識されませんM-x。 「不一致」と表示されます。

(require 'ansi-color)私のアイテムに追加しました。.emacsファイルが(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on).emacsを起動してもエラーや警告が表示されないため、停止します。

標準機能を機能させ、名前で終わるファイルを開くときに自動的に適用されるようにするにはどうすればよいですか.col

答え1

私の考えであなたが逃したのはフォームですinteractive。これは、Emacsが他の関数によって呼び出されるように設計された関数と、ユーザーが直接呼び出すように設計された関数とを区別する方法です。 Emacs Lispの紹介をご覧ください。

これで定義を読むと、インタラクティブなansi-color-apply-on-region使用のために設計されていないことがわかります。 「ansi-color」は、comint出力をフィルタリングするように設計されています。しかし、インタラクティブなラッパーを作成するのは簡単です。

(defun ansi-color-apply-on-region-int (beg end)
  "interactive version of func"
  (interactive "r")
  (ansi-color-apply-on-region beg end))

次のステップは、.col拡張子のANSI色をオンにすることです。これらのファイルの編集に使用したいデフォルトモードにフック機能を追加できます。この機能はメインモードを開くたびに実行されるため、正しいファイルサフィックスの確認を追加する必要があります。

あるいは、「基本」モードに基づいて高速派生モードをハッキングすることもできます。

(define-derived-mode fundamental-ansi-mode fundamental-mode "fundamental ansi"
  "Fundamental mode that understands ansi colors."
  (require 'ansi-color)
  (ansi-color-apply-on-region (point-min) (point-max)))

その拡張子と関連付けてください。

(setq auto-mode-alist
      (cons '("\\.col\\'" . fundamental-ansi-mode) auto-mode-alist))

答え2

次の解決策を使用すると、ANSIカラーシーケンスを含むファイルを読み取ることができますが、保存することはできません。ファイル名には.txt拡張子が必要です。

図書館を置くtty形式~/.emacs.d/site-lisp/initファイルに次の行を追加します~/.emacs

(add-to-list 'load-path "~/.emacs.d/site-lisp/")              
(require 'tty-format)
(add-hook 'find-file-hooks 'tty-format-guess)

答え3

ソリューションを提供してくれた@enzotibに感謝します!

ソリューションを補完するためにユーザーが明示的に呼び出すことを許可する方法は次のとおりです。

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

*.txtまたはREADME以外のファイルの場合は自動的に実行されます。

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

これにより、使用するのとは異なり、元のファイルを変更せずにエスケープシーケンスを色に変更できますansi-color-apply-on-region

関連情報