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

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

GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ1/3)

ここではGtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作に関してを扱う。Pythonバインディングを用いているが、他の言語でGtkSourceViewを用いる場合も要領は同様となる。

言語と色スキーム

色付き表示には

  • 言語
  • 色スキーム(スタイルスキーム)

の2つの要素が関わってくる。それぞれ

  • gtksourceview2.Language: 言語オブジェクト
  • gtksourceview2.StyleScheme: スタイルスキームオブジェクト

というクラスが対応しており、言語と色スキームを指定するのにこれらのクラスに基づいたオブジェクトが用いられる。

言語マネージャとスタイルスキームマネージャ

これらのオブジェクトは手動で1つずつ生成するものではなく、インストール済みの定義ファイルがGtkSourceViewを用いるプログラムの動作時に特定のディレクトリから自動的に読み込まれてその一覧が作られ、これを用いて言語/色スキームの名前をもとにオブジェクトを得る形となる。
言語と色スキームの定義ファイルの管理を行うオブジェクトが

  • gtksourceview2.LanguageManager:言語オブジェクトの管理・gtksourceview2.language_manager_get_default()で得る
  • gtksourceview2.StyleSchemeManager:スタイルスキームオブジェクトの管理・gtksourceview2.style_scheme_manager_get_default()で得る

となり、これらをまず最初に用意しておくことになる。
gtksourceview2.LanguageManagerオブジェクトから言語ごとのオブジェクトを得るにはメンバ関数get_language(),gtksourceview2.StyleSchemeManagerオブジェクトから色スキームごとのオブジェクトを得るにはメンバ関数get_scheme()をそれぞれ呼び出す(引数にその名前を指定する)。

言語と色スキームを設定(変更)する

GtkSourceViewが提供するビュー(gtksourceview2.Viewオブジェクト)に表示する内容を持ったバッファ(gtksourceview2.Bufferオブジェクト)から

  • 色付き表示する言語のオブジェクト
  • 使用する色スキームのオブジェクト

の両方を指定することで、色付き表示の言語と色スキームが設定される。それぞれ

  • 引数に言語オブジェクトを指定してメンバ関数set_language()を呼ぶかGObjectプロパティlanguageに言語オブジェクトを代入する
  • 引数に色スキームオブジェクトを指定してメンバ関数set_style_scheme()を呼ぶ

という操作により設定され、即座に変更が反映される。

言語ファイルと色スキームファイルの配置/探索ディレクト

言語ファイルはディレクト/usr/share/gtksourceview-2.0/language-specs/以下の.langファイルとなっており、追加で/usr/local/share/gtksourceview-2.0/language-specs/以下のものも読み込む。更に、一般ユーザが自分用に用意したものを${XDG_DATA_HOME}/gtksourceview-2.0/language-specs/(環境変数XDG_DATA_HOMEが未定義の場合は${HOME}/.local/share/gtksourceview-2.0/language-specs/)からも読み込む。
色スキームファイルは/usr/share/gtksourceview-2.0/styles/以下の.xmlファイルとなっており、こちらも同様にして追加で/usr/local/share/gtksourceview-2.0/styles/以下のものも読み込み、一般ユーザのファイルも${XDG_DATA_HOME}/gtksourceview-2.0/styles/(環境変数XDG_DATA_HOMEが未定義の場合は${HOME}/.local/share/gtksourceview-2.0/styles/)以下からも読み込む。
どちらも、標準の探索パスの「/usr/share」や「/usr/local/share」の部分は環境変数XDG_DATA_DIRSに「:」区切りでディレクトリを並べたものを指定することで書き換えることもできる。
システムに含まれない(標準でサポートされない)言語の定義ファイルや独自の色スキームファイルを追加する場合はこれらの場所に入れることになる。

(「GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ2/3)」に続く)

関連記事:

使用したバージョン:

  • Python 2.6.4
  • PyGTK 2.16.0
  • PyGtkSourceView 2.8.0