• 差分
  • リロード
  • 一覧
  • 最終更新のRSS

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);