#if 0 で囲まれた「文字」のほうの色を変える方法

はじめに

vim では、はじめから当たり前のように #if 0 をコメントと同じ色で表示してくれるのに Emacs ではそうはいかない。困ったもんだ。

一応 cpp-highlight-buffer を使うと「背景色」を変えるのは比較的簡単にできる。 (簡単と言ってもけっこう癖あるけど)

しかし、文字色を変える方法は、さらにわかりにくいので、ここにその方法を載せときます。

cpp-highlight-buffer の裏技を使う。

裏技といっても、Emacs の Face について知っていれば当たり前なのかも…。

というわけで Face を定義して cpp-highlight-buffer でその Face を使います。

.emacs に以下の設定を書くだけ。

;; cpp-highlight-buffer
(defface if-zero-face (quote ((t (:foreground "brightblack")))) nil)
(setq cpp-edit-list
      (quote
       (("0" if-zero-face default both)
        ("1" default if-zero-face both))))
(setq cpp-face-type (quote dark))
(setq cpp-known-face (quote default))
(setq cpp-unknown-face (quote default))
(add-hook 'c-mode-common-hook (lambda () (cpp-highlight-buffer t)))

やっていること

if-zero-face というフェイスを作る。フェイスは list-faces-display で列挙されるやつです。

ここでは foreground (文字色) を brightblack (黒だけど少しあかるい) にしてる。 自分の Emacs で使える色は list-colors-display で確認できるよ。

あとは cpp-highlight-buffer の設定。 #if 0 のときと、 #if 1 のときの #else 側のFace を if-zero-face と指定する。

その他 cpp-highlight-buffer の設定をいくつか。

フックを追加して c-mode とかのときに (cpp-highlight-buffer t) を実行するようにしておく。

defface で作る Face の設定を変えれば、背景色を変えたり bold, italic, underline なども指定できる。

以上