Emacsをちょっとだけ自分色に染める (Emacs Advent Calendar jp: 2011)


この記事は Emacs Advent Calendar jp: 2011 : ATND の9日目です。遅くなってごめんなさい!
去年にひき続いて標準で少しEmacsを便利にする小技を。

Emacsを使ってて普段使ってるmodeにちょっとだけ色を足したいとか思うことはないですか?そんなときは font-lock-add-keywords を使えば好きな色を足すことができちゃいます。

使い方は簡単。例えばこんな風にすると

(font-lock-add-keywords
 'c-mode
 '(("!" . font-lock-warning-face)))

c-modeで「!」が赤くなります。数字にも色を付けて、hogeをキーワードの色にしたければこんな風に。

(font-lock-add-keywords
 'c-mode
 '(("!" . font-lock-warning-face)
   ("hoge" . font-lock-keyword-face)
   ("[0-9]+" . font-lock-constant-face)))

そうするとこうなります。

ただこの font-lock-add-keywords には弱点があって。間違った設定とかにしてしまうと、ハイライトを壊して元に戻せなくなってしまうのです。

というわけで、font-lock-user-keywords というものを作って使ってます。この子なら壊したときにも簡単に戻すことができるから安心です。

(defun font-lock-user-keywords (mode &optional keywords)
  "Add user highlighting to KEYWORDS to MODE.
See `font-lock-add-keywords' and `font-lock-defaults'."
  (unless mode
    (error "mode should be non-nil "))
  (font-lock-remove-keywords mode (get mode 'font-lock-user-keywords))
  (font-lock-add-keywords mode keywords)
  (put mode 'font-lock-user-keywords keywords))

設定するときは font-lock-add-keywords と同じように使うだけ。リセットするときは (font-lock-user-keywords 'c-mode) として呼んであげれば元に戻ってくれます。ただ、font-lock-add-keywords で足したものは戻らないのでそこは注意して使ってくださいね。

明日は [twitter:@ta2_o2p] さんです。それでは。