テキストファイルに色を付ける

(Emacs でのやり方については、こちらをご覧ください)



一昔前までは「文章はテキストファイルで書こう。MS Word などのワープロソフトでは互換性が云々」などと言う人が結構いた。

しかし、実際、企業や役所、教育機関などで作成される文書のほとんどは、「ワープロソフト」形式(なかには MS Excel や PowerPoint で書く人もいる!)であろう。良かれ悪しかれ、こうしたソフトは人口に膾炙しており、互換性はもはや問題ではないように思える。またバイナリファイルになると容量が増えるが、ハードディスクの大容量化によって、もはやそんなことは心配しなくともよくなった。

それでも私は――個人的なものに限ってだが――テキストファイルで文章を書いている。この形式が良いからではなく、Emacs や xyzzy などの優れたテキストエディタが存在しているためである。

テキストファイルで不満なのは、文字に装飾を施すことができない点である。しかし、xyzzy には、これを可能とする拡張 lisp がある。まずは下記の画像をご覧いただきたい。



これは、my-coloring.l という拡張を使ったものである。文字列をセレクションまたはリージョンで選択し、M-x color-string-popup/color-string-popup-by-region とすると、ポップアップで指定する装飾が表示される。そこで色なり下線などを選択すると、くだんの文字列にそれらが施されるのである。文書を保存すると、同じフォルダに[文書名].col というファイルも記録される。これで、その後に文章を開いても色情報が復元される。

ただし、当然ながらこれは xyzzy でしか使えない。他のソフトで、その(色付きの)テキストファイルを開いても装飾は表示されないし(文章を表示される)、そこで何らかの編集をすると、装飾の情報が狂ってしまい、xyzzy でも正しく表示されないようになる。また、扱える色は xyzzy が制御できるものに限られる。

このように、この拡張ではあくまで限定的な使い方しかできないし、装飾情報が壊れて付け直さなければならないことも少なくない。そこで便利なのが coloring-enclosed-braces-string というコマンド。これは括弧で囲われている文字列すべてを、一括で装飾を施すものである。あらかじめ構造化された文書を書いていれば、簡単に色付けを行うことができる。

以下に、xyzzy の設定ファイル (.xyzzy/siteinit.l) における記述例を掲げる。


;; テキストに色付け
;; my-coloring
(require "my-coloring")
;; カスタマイズ
(setq *coloring-attribute-list* '(
   ("赤(&1)" :foreground 11)
   ("青(&2)" :foreground 4)
   ("黄(&3)" :foreground 3)
   ("緑(&4)" :foreground 2)
   ("ピンク(&5)" :foreground 5)
   ("橙(&6)" :foreground 12)
   ("紫(&7)" :foreground 10)
   ("灰(&8)" :foreground 15)
   ("白(&9)" :foreground 0)
   ("太字(&b)" :bold t)
   ("下線(&u)" :underline t)
   ("取消し線(&x)" :strike-out t)
   ("太赤" :foreground 11 :bold t)
   ("太青" :foreground 4 :bold t)
   ("太黄" :foreground 3 :bold t)
   ("太緑" :foreground 2 :bold t)
   ("太ピンク" :foreground 5 :bold t)
   ("赤+下線" :foreground 11 :underline t)
   ("青+取消し線" :foreground 4 :strike-out t)
   ("前白背青" :foreground 0 :background 3)
   ("前赤太背黄" :foreground 11 :background 11 :bold t)
   ("前橙背緑" :foreground 12 :background 14)
   ("前黒背白" :foreground 8 :background 7)
   ("前黒背灰" :foreground 8 :background 15)
   ("前桃太背水" :foreground 5 :background 4)
   ))
(setq *coloring-color-list* '*1
;; 括弧の色付
(setq *coloring-brace-list* '("():半角"
   "[]:半角"
   "{}:半角"
   "<>:半角"
   "():全角"
   "[]:全角"
   "<>:全角"
   "《》:全角"
   "{}:全角"
   "〔〕:全角"
   "『』"
   "【】"
   "「」"
   "≪≫:ギユメ"
   "#||#"
   "\"\": double quote"
   "'': single quote"
   " : blank"
   ",,: comma"
   "/**/"
   "/***/: java doc"
   "=begin\n=end : perl"

   ": HTML"

   "HTML:タグ")
)

;; grep にマッチした語のフォント
(setq *grep-highlight-match* '(:foreground 3 :bold t))

;; color-string-popup をリージョンで行う
(defun color-string-popup-by-region ()
(interactive)
(exchange-region-and-selection)
(color-string-popup)
)

と、ここまで書いて何だが、my-coloring.l は配布元のサイト(「きまぐれにxyzzy」)はすでに閉鎖されており(Internet Archive にも残っていない)、手に入れるのは困難である。興味のある方は、HIE no xyzzy にある「テキストに色付け」などを試してもらいたい。

*1:"赤(&1)" 1)    ("明るい緑(&2)" 2)    ("黄色(&3)" 3)    ("青(&4)" 4)    ("ピンク(&5)" 5)    ("明るい水色(&6)" 6)    ("白(&7)" 7)    ("黒(&8)" 8)    ("茶色(&9)" 9)    ("緑(&A)" 10)    ("黄土色(&B)" 11)    ("紺(&C)" 12)    ("紫(&D)" 13)    ("水色(&E)" 14)    ("灰色(&F)" 15)