whitespace-modeの設定

anthy.elでは全角スペースを打てなくする設定があったんですが、
mozc.elではそのような設定がなかったため、全角スペースが目立つ
ようにしたいって思いました。


Emacs23からは不可視な文字を表示するための whitespace-modeって
いうのがあるみたいなので、それを使えばいいじゃん、ってことで
使ってみたんですけど、デフォルトの設定ではありとあらゆる不可視
文字を見えるようにしてしまってかえって見づらいです。


設定についてもいいのがねぇ、って思っていたんですが、いいのが
見つかりました。scala-mode.elのインデントの挙動を改善する, .emacsまとめ(1) - 継続にっき(2010-11-06)です。
これをベースに自分の好みに設定してみました。


設定は以下のとおりです。

;; for whitespace-mode
(require 'whitespace)
;; see whitespace.el for more details
(setq whitespace-style '(face tabs tab-mark spaces space-mark))
(setq whitespace-display-mappings
      '((space-mark ?\u3000 [?\u25a1])
        ;; WARNING: the mapping below has a problem.
        ;; When a TAB occupies exactly one column, it will display the
        ;; character ?\xBB at that column followed by a TAB which goes to
        ;; the next TAB column.
        ;; If this is a problem for you, please, comment the line below.
        (tab-mark ?\t [?\xBB ?\t] [?\\ ?\t])))
(setq whitespace-space-regexp "\\(\u3000+\\)")
(set-face-foreground 'whitespace-tab "#adff2f")
(set-face-background 'whitespace-tab 'nil)
(set-face-underline  'whitespace-tab t)
(set-face-foreground 'whitespace-space "#7cfc00")
(set-face-background 'whitespace-space 'nil)
(set-face-bold-p 'whitespace-space t)
(global-whitespace-mode 1)
(global-set-key (kbd "C-x w") 'global-whitespace-mode)

タブと全角スペースのみ見えるようにしています。半角スペースや改行は
そのままです。参考サイトのものではあんまり目立たなかったので、
タブにアンダーラインを引き、全角スペースはボールドで強調してます。

見た目を示します。
emacs_whitespace


めでたしめでたしと思ったんだけど、whitespace-modeを onにすると
スクロールがもっさりします。特にタブが多用されるカーネルソースでは
いらいらするだけなので、簡単に有効無効を切り替えられるように、
キーを割り当てました。基本的には使わなくて、編集時のみ使うような
感じにしようと考えています。

追記

Emacs 23.3から whitespace-styleに faceを追加しないと
強調表示はされますが、色がつきません。23.3を使っている人は
若干注意が必要です。