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))

おすすめ記事