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

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

GtkSourceViewのビューとバッファに関する色々な設定に関して(メモ・前半)

GtkSourceViewについて、これまでにPythonの言語バインディングを用いて色付き表示をするところまでを扱ったが、ここではGtkSourceViewのGUI部品に関する色々な設定についてを扱う。
今回もPythonの言語バインディングを用いているが、他の言語でも(若干扱い方の変わる部分はあるが)要領は同じ。
ソースの表示を行うGUI部品のビュー(gtksourceview2.Viewクラス)とその内容を持つバッファ(gtksourceview2.Bufferクラス)のそれぞれに、色々な設定を行うためのGObjectプロパティやメンバ関数があり、以下に設定内容ごとに具体的な設定方法を記述する。

バッファ(gtksourceview2.Bufferクラス)

色付き表示の対象言語の動的な変更

色付き表示における対象の言語は、「GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ2/3)」で扱っている言語オブジェクト(gtksourceview2.Languageクラス)をメンバ関数set_language()に引数として渡すか、もしくはGObjectプロパティlanguageに代入することで動的に変更できる。
なお、GObjectプロパティhighlight-syntaxをFalseにするかメンバ関数set_highlight_syntax()にFalseを代入すると色付き表示を無効にできる。

カーソル位置に対応する括弧の強調表示

既定ではカーソル位置に括弧があるときに対応する括弧が強調表示されるが、GObjectプロパティhighlight-matching-bracketsをFalseにするかメンバ関数set_highlight_matching_brackets()にFalseを渡すことでこれを無効にすることができる。

取り消し(undo)/やり直し(redo)の操作可否について

取り消し(undo)/やり直し(redo)の操作可否状態は、それぞれバッファの

によって真偽値として得られる。
取り消し/やり直しのボタンを作って、この状態に応じて「取り消し」「やり直し」ボタンが押せたり押せなかったりするようにする場合、「PyGObjectで gobject.GObjectクラスを継承してGObjectプロパティを用いる(後半)」にも書いたようなGObjectプロパティの値の変更の監視をしてハンドラにset_sensitive()にプロパティの値を渡すようにするとよい。

self.__sourcebuf = gtksourceview2.Buffer(language='[言語名]')
self.__sourcebuf.connect('notify::can-undo', lambda gobj, property: [取り消しボタン].set_sensitive(self.__sourcebuf.props.can_undo))
self.__sourcebuf.connect('notify::can-redo', lambda gobj, property: [やり直しボタン].set_sensitive(self.__sourcebuf.props.can_redo))

ハンドラ関数を定義してその中で処理をしてもよいが、PythonやVala言語ではラムダ(引数は2つでオブジェクトとGObjectプロパティ情報となる)を用いて簡単に記述できる。
GObjectプロパティmax-undo-levelsもしくはメンバ関数set_max_undo_levels()を用いて取り消し可能な段階数の上限を指定することもできる。既定値は1000で-1を指定すると無制限となる。
メンバ関数begin_not_undoable_action()end_not_undoable_action()の間にそのバッファの内容を変更する処理(例:GObjectプロパティtextへ代入を行って内容を置き換える)を挟んで記述すると、その処理は取り消し可能ではないものとして処理される。そうしないと、プログラムの中で行う変更であっても取り消しができる(という仕様になっている)。

(「GtkSourceViewのビューとバッファに関する色々な設定に関して(メモ・後半)」に続く)

関連記事:

使用したバージョン:

  • Python 2.6.4
  • PyGTK 2.16.0
  • PyGtkSourceView 2.8.0