Emacsでテキストファイルに色付けする
xyzzy でテキストファイルに色付けする方法については、かつて記事にした。では、Emacs (NTEmacs) でやるにはどうすればよいのだろうか。何か方法がある筈だが、情報が少ないので放置しておいた。
この度、あらためて調べてみると、そもそも hi-lock-mode (hi-lock.el) というのがデフォルトで付属していた。このモードについては、例によってMeadow/Emacs memo を参照されたい。基本的な使い方について述べると――。
- 起動方法
- Emacs の起動時からオン:.emacs に "(global-hi-lock-mode 1)" と書く
- Emacs の起動後にオン: M-x hi-lock-mode
- ハイライトパターンの指定
- 行:M-x highlight-lines-matching-regexp (= C-x w l)
- 単語:M-x hi-lock-face-phrase-buffer, highlight-regexp (= C-x w h), highlight-phrase (= C-x w p)*1
- ハイライトパターンの解除:M-x unhighlight-regexp (= C-x w r)
- ハイライトパターンの書き出し:M-x hi-lock-write-interactive-patterns (= C-x w b)
その他の設定に関しては、hi-lock.el を参照のこと。
さて、本題はここから。このハイライトモードだが、どうも使いづらい。
まずデフォルトのフェイスが原色系でセンスがない。これは .emacs に好みの色でフェイスを登録すればよい。例えば以下のようにする。
(defface hi-grey ;; フェイス名を任意で登録
'((((background dark))
(:background "black" :foreground "grey")) ;; 色等を指定
(t (:background "black")))
"Face for hi-lock mode."
:group 'hi-lock-faces)
次に問題なのは、設定したパターンを再利用する場合。
マニュアルにある基本的なやり方は、以下のようなものである。まず M-x hi-lock-write-interactive-patterns でハイライトパターンを書き出し、使っているテキストファイルに記しておく。そして、再度そのファイルを開き、M-x hi-lock-find-patterns (= C-x w i) をする。
また、.emacs に、
(setq hi-lock-file-patterns-policy 'ask)
と記すと、上記の M-x hi-lock-find-patterns の手間を省き、ハイライトパターンを自動的に検索し、それを読み込むかどうかきいてくる。
さらに、
(setq hi-lock-file-patterns-policy (lambda (pattern) t))
とすると、テキストファイルを開く度にハイライトパターンを検索し、自動的に読み込んでくれる*2。
しかし、いずれにしてもテキストファイルの一つずつに、いちいちハイライトパターンを記入することになる。これは面倒くさい。.emacs で一括指定して、ファイルを開く毎にそれを適用させるにはどうすればよいか。
ハイライトパターンの指定は、hi-lock-set-pattern という命令を使うので、テキストファイルのフックで定義すればよい。具体的には以下のようにする。
(add-hook 'text-mode-hook
'(lambda ()
(hi-lock-set-pattern "([^)]*)" 'hi-yellow) ;; "パターン" 'フェイス
))
これで Emacs でも、テキストファイルの色付けが満足にできるようになった。よかったよかった。