試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

GNU Emacsのバージョン22以下(外部版)とバージョン23以上(付属版)の両方で動作するnXML modeの色設定の記述について

「nXML modeの設定とアウトライン操作メモ」ではバージョン22系のEmacsで追加パッケージとしてnXML modeを用いており、その後Emacsのバージョンが23系になった際には標準で同モードが提供されるようになっているのだが、いつの頃からかリンク先の記事におけるカスタム配色設定が動作しなくなっている(既定の色設定になる)。
調べてみたところ、Emacsの「Face」(見栄え定義)の指定する名前が追加パッケージのときのものとバージョン23系に含まれるものとで異なることが分かった。
そこで、同じ設定の記述でバージョン22系(追加パッケージでnXML modeを使用)とバージョン23系(標準で含まれるもの)のどちらのEmacsでも色が正しく変わるようにした。
「nXML modeの設定とアウトライン操作メモ」に記述した設定の内、色設定に関する部分のみを下のものに置き換える。
ファイル名: ~/.emacs.el

;; 色設定
(if (>= emacs-major-version 23)
 ; バージョン23以上/付属版
 (custom-set-faces
  '(nxml-comment-delimiter       ((t (:foreground "#66e6e6"))))         ; <!-- -->
  '(nxml-comment-content         ((t (:foreground "#f69933"))))         ; コメント
  '(nxml-delimited-data          ((t (:foreground "LightSalmon"))))     ; 属性値やDTD引数値など
  '(nxml-delimiter               ((t (:foreground "LightSalmon"))))     ; <> <? ?> ""
  '(nxml-element-local-name      ((t (:foreground "PaleGreen"))))       ; 要素名
  '(nxml-element-colon           ((t (:foreground "LightSteelBlue"))))  ; :(xsl:paramなど)
  '(nxml-name                    ((t (:foreground "LightGoldenrod"))))  ; 属性名など
  '(nxml-ref                     ((t (:foreground "LightSkyBlue"))))    ; &lt;など
  '(nxml-tag-slash               ((t (:foreground "LightSkyBlue"))))    ; /(終了タグ)
 )
 ; バージョン23未満/外部版
 (custom-set-faces
  '(nxml-comment-delimiter-face  ((t (:foreground "#66e6e6"))))         ; <!-- -->
  '(nxml-comment-content-face    ((t (:foreground "#f69933"))))         ; コメント
  '(nxml-delimited-data-face     ((t (:foreground "LightSalmon"))))     ; 属性値やDTD引数値など
  '(nxml-delimiter-face          ((t (:foreground "LightSalmon"))))     ; <> <? ?> ""
  '(nxml-element-local-name-face ((t (:foreground "PaleGreen"))))       ; 要素名
  '(nxml-element-colon-face      ((t (:foreground "LightSteelBlue"))))  ; :(xsl:paramなど)
  '(nxml-name-face               ((t (:foreground "LightGoldenrod"))))  ; 属性名など
  '(nxml-ref-face                ((t (:foreground "LightSkyBlue"))))    ; &lt;など
  '(nxml-tag-slash-face          ((t (:foreground "LightSkyBlue"))))    ; /(終了タグ)
 )
)

現状では同じ色設定の記述を2回繰り返しているような形になってしまっており、もっと上手な書き方があるかもしれない。
もちろん、今後バージョン23未満は使わないというのであれば、バージョンで処理を分岐させず、以前の記述に対して「nxml-[名前]-face」の「-face」を空文字列に一括置換してもよい。

関連記事:

使用したバージョン: