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

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

GtkSourceView(バージョン2系)の概要について(概要と基本的な機能)

GtkSourceViewの概要

GTK+にはテキストビューというGUI部品があり、その中身となるテキストバッファというものと関連付けて複数行の書式付きテキストを表示することができる(画像も表示可)のだが、これを拡張してプログラムやマークアップ言語などの編集に特化させたものがGTK+本体とは別のGtkSourceViewというライブラリとして配布されている。
ほとんどのディストリがパッケージを用意しており、これを用いる何らかのパッケージを入れる際に同時に依存パッケージとしてインストールされる場合もある。
GtkSourceViewが提供するビュー/バッファがテキストビュー/テキストバッファと異なるのは

  • 表示する言語ごとにその文法に基づいた色付き表示(シンタックス・ハイライティング)を行うことができ、標準で主要な言語については対応済み
  • 色付き表示において、ユーザが設定する色設定(色スキーム)によって、同じ言語でも画面上の表示色のパターンを変更するすることができる(言語の定義ファイルによってはスキームで色が変わらないこともある)
  • バッファ内のテキストデータを編集する際の取り消し(undo)/やり直し(redo)機能が搭載されている(テキストビューは取り消し処理はできない)
  • 大文字と小文字を区別しない検索が可能(テキストビューでは区別する検索のみ)
  • 設定により、現在の行を強調表示したり行番号の表示を行ったりスペースやタブといった特殊な文字の表示を行ったり80桁(位置は変更可)の線を表示したりできる
  • Tab/Shift+Tabキーを押すことで字下げ(インデント)の調整ができる
  • 字下げの挙動(字下げ幅やタブ幅,タブの代わりにスペース使用など)を細かく指定可

など。
GtkSourceViewのライブラリはC言語で書かれているが、C言語以外の

など、GTK+の言語バインディングの存在する中の多くの言語から利用可能となっている。ただし、言語バインディングの(ディストリの)パッケージを追加でインストールしないと使えない場合もある。Pythonの場合「python-gtksourceview」「python-gtksourceview2」「gtksourceview-python」などの名前のパッケージになっている。
以下、説明にPythonの言語バインディング(PyGtkSourceView)を用いるが、中で用いている機能自体は同じなので、要領は言語によらず共通する。ただしC言語ではGObjectライブラリを直接用いる形でオブジェクトを扱うことになる(Vala言語を代わりに用いると楽)。

基本的な機能と単純にテキストビューを置き換えた場合の違いについて

GtkSourceViewライブラリが提供するクラスの中で

  • gtksourceview2.View
  • gtksourceview2.Buffer

の2つはそれぞれGTK+(ここではPythonを用いているのでPyGTK)のテキストビュー/テキストバッファにおける

のクラスを継承した形をとる。つまり、gtksourceview2.View/gtksourceview2.Bufferのオブジェクトは、GTK+のテキストビュー/テキストバッファと同じメンバ関数やGObjectプロパティを用いて処理をすることができる(これに加えて追加の機能が利用可能)。
テキストビュー/テキストバッファをGtkSourceViewのものに単純に置き換えただけで追加のメンバ関数やGObjectプロパティなどを全く用いなかったとしても、ビュー内のコンテキストメニューからは

  • 元に戻す
  • やり直す

というメニュー項目が表示され、編集操作の取り消しとやり直しができるようになる。

(「GtkSourceView(バージョン2系)の概要について(テキストビューを置き換えるだけの例)」に続く)

関連記事:

使用したバージョン:

  • Python 2.6.4
  • PyGTK 2.16.0
  • PyGtkSourceView 2.8.0