geditのハイライティングルールをカスタマイズする
#contents
* はじめに [#k46ebc96]
GNOME標準テキストエディタgeditはGtkSourceViewというウィジェットを用いて
ハイライティング機能つきテキスト編集を可能にしている。
GtkSourceViewはデフォルトでかなりの数のハイライティングルールをサポートしており、
ルールが無くて困るということは普通に使う分にはほとんどないと思われる。
しかし、不幸にもドマイナーなプログラミング言語を触ることになった場合等は
ハイライティングルールを自分で追加する必要が出てくる。
ここではNesC((C言語に似たプログラミング言語。無線センサネットワークマイコン用のOSであるTinyOSを開発するために使われている。イベントドリブンなプログラムモデルが特徴。))
というプログラミング言語用ハイライティング設定を実際に追加してみる。
* ハイライティング設定ファイル [#hc4f8fa0]
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のリファレンス:http://library.gnome.org/devel/gtksourceview-2.0/stable/]]を参照。
GtkSourceView 2.0になってきめ細かいハイライティングが可能になった反面、
langファイルの書式がやや複雑になったが、
NesCの場合、C言語のlangファイルにいくつかキーワードを加えるだけでも
充分使える。
- &ref(nesc.lang);
このファイルを上述のディレクトリに配置し、geditを起動すれば
NesCのハイライティングを指定できるようになる。
* 自動ハイライティング [#rb0f858b]
上記の操作によってNesCのハイライティングはできるようになったが、
ファイルに対して自動的にハイライティングを適用することはまだできていない。
実は、先に挙げたnesc.langはtext/x-nescsrc
((text/x-nescsrcというMIMEタイプは筆者がてきとーにでっちあげたものなので、本質的には何でも構わない))
というMIMEタイプのファイルに対して
自動的に適用されるように設定されているのだが、
現状ではGNOMEはこのMIMEタイプを認識しないのである。
そこで、NesCソースファイルの一般的な拡張子である.ncのファイルに対して
text/x-nescsrcというMIMEタイプを割り当てる。
-参考: [[Ubuntu/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ソースファイルが自動的にハイライティングされるようになる。
#ref(nesc_highlight.png);