emacs のシンタックスハイライトでボールド表示を止める2009/12/15 09:30

Linux (CentOS や Debian) を使うときは GUI じゃなく CUI、つまりコンソールを使っているのだが、Windows からは TeraTerm を使っている。TeraTerm のデフォルトでは背景色が白で文字が黒なのだが、みょーにまぶしいので、背景色を黒、文字色をオレンジにしている。ちなみにこの配色は 20 年位前の東芝の Dynabook や J-3100 のプラズマディスプレイの配色だ。

この配色で emacs のシンタックスハイライトを行うと font-lock-keyword-face (キーワード)、や font-lock-function-name-face (関数、メソッド) が白背景、青文字になってしまい非常に見にくい。TeraTerm の設定でボールド表示 (VTBoldColor) の設定を変えると別の色に変えることはできるのだが、これだと、emacs のボールド表示が全て同一の色になってしまい、これはこれで、気持ち悪い。

色々考えた結果、emacs で「シンタックスハイライトのボールド表示をやめる」という結論に達したのだが、僕に elisp がわかるはずもなく、google 先生に聞いてもイマイチだったので、font-lock-keyword-face と font-lock-function-name-face からボールドを外してしまうことにした。ただし、これらの設定そのものを変えてしまうのは問題があろうかと思ったので、.emacs に次のように設定して、定義を上書きすることにした。(元の設定をコピーして bold の指定を削っただけ)

(defface font-lock-my-keyword-face
  '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold))
    (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold))
    (((class color) (min-colors 88) (background light)) (:foreground "Purple"))
    (((class color) (min-colors 88) (background dark)) (:foreground "Cyan1"))
    (((class color) (min-colors 16) (background light)) (:foreground "Purple"))
    (((class color) (min-colors 16) (background dark)) (:foreground "Cyan"))
    (((class color) (min-colors 8)) (:foreground "cyan"))
    (t ))
  "Font Lock mode face used to ruby keywords.")
(defface font-lock-my-function-name-face
  '((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
    (((class color) (min-colors 88) (background dark)) (:foreground "LightSkyBlue"))
    (((class color) (min-colors 16) (background light)) (:foreground "Blue"))
    (((class color) (min-colors 16) (background dark)) (:foreground "LightSkyBlue"))
    (((class color) (min-colors 8)) (:foreground "blue"))
    (t (:inverse-video t)))
  "Font Lock mode face used to ruby function names.")
(setq font-lock-keyword-face 'font-lock-my-keyword-face)
(setq font-lock-function-name-face 'font-lock-my-function-name-face)

ほとんど、暴挙とも言える荒技だと思うが、まっとうな方法が見つかるまでこれでいこうと思う。