Paepoi » Gedit Tips » Gedit プラグインの編集
Gedit プラグインの編集
Gedit のエディタ部分は GtkSourceView という GtkTextView サブクラスそのままである。
なので Gtk+ の知識があれば何でもできます、Windows での秀丸マクロより遥に自由度が高いです。
ここでは簡単な解説とコード例をいくつか。
# 最終更新日 2018.07.22
なので Gtk+ の知識があれば何でもできます、Windows での秀丸マクロより遥に自由度が高いです。
ここでは簡単な解説とコード例をいくつか。
# 最終更新日 2018.07.22
キーボードアクセラレータ
Gedit プラグインの作り方で解説しているコードに追加や変更をする場合
デフォルト割り当てのキーが優先するので何も割り当てされていないのを確認してから指定してください。
#self.app.set_accels_for_action("win.action_name", ["<Control>B"])
self.app.set_accels_for_action("win.action_name", ["<Control>B", "<Alt>C"])
という具合に指定。デフォルト割り当てのキーが優先するので何も割り当てされていないのを確認してから指定してください。
文字列の加工、挿入、削除
基本的にすべてのテキスト操作は自分で作成したハンドラ内で行います
プラグインを呼び出すと activate シグナルが発生するのでそのハンドラにて
肝心の編集は Python の強力な文字列編集機能が使えます
プラグインを呼び出すと activate シグナルが発生するのでそのハンドラにて
肝心の編集は Python の強力な文字列編集機能が使えます
def on_test_activate(self, action, param):
"""
下記の buf の中にテキスト文書が入っています
コレを GtkTextIter を介して編集を行います
"""
# この view が GtkSourceView
view = self.window.get_active_view()
# この buf が GtkTextBuffer
buf = view.get_buffer()
# カーソル位置の GtkTextIter 取得
it = buf.get_iter_at_offset(buf.props.cursor_position)
# カーソル位置の一つ手前の GtkTextIter 取得(漢字も一文字となる)
previter = buf.get_iter_at_offset(buf.props.cursor_position - 1)
# 文書の最初や最後の GtkTextIter 取得
startiter = buf.get_start_iter()
enditer = buf_get_end_iter()
# GtkTextIter 位置の文字を得る(漢字も一文字となる)
c = it.get_char()
if c == "あ":
pass
# GtkTextIter の比較
pos = buf.props.cursor_position
while 1:
# 次の GtkTextIter を得る
pos += 1
nextiter = buf.get_iter_at_offset(pos)
# EOF に到達か?
if nextiter.equal(enditer):
break
# 選択範囲の文字列取得(最初と最後がタプルで戻る、選択されていないなら例外)
try:
select_start, select_end = buf.get_selection_bounds()
except:
pass
text = select_start.get_text(select_end)
# 指定範囲の削除
buf.delete(select_start, select_end)
# GtkTextIter 位置に文字列の挿入
buf.insert(it, "ズッコン")
# カーソル位置に直接文字列の挿入
buf.insert_at_cursor("バッコン")
Copyright(C) sasakima-nao All rights reserved 2002 --- 2025.