geditのハイライティングルールをカスタマイズする
はじめに †
GNOME標準テキストエディタgeditはGtkSourceViewというウィジェットを用いて ハイライティング機能つきテキスト編集を可能にしている。 GtkSourceViewはデフォルトでかなりの数のハイライティングルールをサポートしており、 ルールが無くて困るということは普通に使う分にはほとんどないと思われる。 しかし、不幸にもドマイナーなプログラミング言語を触ることになった場合等は ハイライティングルールを自分で追加する必要が出てくる。
ここではNesC*1 というプログラミング言語用ハイライティング設定を実際に追加してみる。
ハイライティング設定ファイル †
Ubuntu 7.10 (Gutsy Gibbon)に付属しているgedit 2.20.1では GtkSourceView 2.0が採用されている。 システムワイドのハイライティング設定はデフォルトで /usr/share/gtksourceview-2.0/language-specsディレクトリに納められている。
toshio@toshio-laptop:/usr/share/gtksourceview-2.0/language-specs$ ls R.lang convert.py docbook.lang haddock.lang language.dtd ada.lang cpp.lang dpatch.lang haskell-literate.lang language.rng awk.lang csharp.lang dtd.lang haskell.lang language2.rng boo.lang css.lang erlang.lang html.lang latex.lang c.lang d.lang fortran.lang idl.lang libtool.lang changelog.lang def.lang gap.lang ini.lang lua.lang chdr.lang desktop.lang gtk-doc.lang java.lang m4.lang check.sh diff.lang gtkrc.lang javascript.lang makefile.lang ... ... ... ... ...
見れば分かるように、ハイライティング設定は拡張子がlangであるファイルに 記述されている。 langファイルはXMLで書かれているのでテキストエディタで簡単に編集することが可能である。
一方、ユーザーレベルでハイライティング設定を追加したい場合は~/.gnome2/gtksourceview-1.0/language-specsディレクトリにlangファイルを作成すればいいようだ。 なぜか~/.gnome2/gtksourceview-2.0ディレクトリでは認識されなかったので注意。 (gedit 2.20.1の場合)
langファイルの書式はGNOMEのリファレンスを参照。 GtkSourceView 2.0になってきめ細かいハイライティングが可能になった反面、 langファイルの書式がやや複雑になったが、 NesCの場合、C言語のlangファイルにいくつかキーワードを加えるだけでも 充分使える。
このファイルを上述のディレクトリに配置し、geditを起動すれば NesCのハイライティングを指定できるようになる。
自動ハイライティング †
上記の操作によってNesCのハイライティングはできるようになったが、 ファイルに対して自動的にハイライティングを適用することはまだできていない。 実は、先に挙げたnesc.langはtext/x-nescsrc *2 というMIMEタイプのファイルに対して 自動的に適用されるように設定されているのだが、 現状ではGNOMEはこのMIMEタイプを認識しないのである。
そこで、NesCソースファイルの一般的な拡張子である.ncのファイルに対して text/x-nescsrcというMIMEタイプを割り当てる。
$ mkdir -p ~/.local/share/mime/packages $ gedit ~/.local/share/mime/packages/Overrides.xml
Overrides.xmlの内容に以下を追加。
<?xml version='1.0'?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="text/x-nescsrc">
<sub-class-of type="text/plain"/>
<comment>NesC source code</comment>
<comment xml:lang="ja">NesC ソースファイル</comment>
<glob pattern="*.nc"/>
</mime-type>
</mime-info>
MIMEデータベースを更新。
$ update-mime-database ~/.local/share/mime
こうしておけば、NesCソースファイルが自動的にハイライティングされるようになる。

