#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
なども指定できる。