読者です 読者をやめる 読者になる 読者になる

gedit2でPythonで作ったプラグインからファイルを開く

Python gedit

ハマったのでメモ。gedit2で、Python製のプラグインからファイルを開く。
geditの最新版は3.xなんだけど、環境の制約でCentOS 5.xのgedit2(バージョン2.16)が対象。

create_tab_from_uriのバグ

gedit2のドキュメントを読むと、gedit.Window.create_tab_from_uriは、指定したuriのファイルを新しいタブで開くと説明されている。
説明には、encodingはNoneを指定できるとあるが、このバージョンではNoneを指定するとエラーになる(gedit.Encodingのインスタンスの指定が必要)。
gedit 2.16のこのAPIにはencoding引数のあたりにバグがあるらしい。
仕方なく、Encodingのインスタンスを指定したこんな感じのコードを実行した。

window.create_tab_from_uri(
    'file:///home/tokibito/hoge.txt',
    gedit.encoding_get_utf8(),
    0, False, False)

が、しかし、タブを開いてファイルを読み込む段階で、geditがクラッシュしてしまう。
では別の方法を、と、タブを作成してgedit.Document.loadを使うように変更してみたが、やはり読み込みの段階でクラッシュしてしまう。
ちなみに2.26のあたりでこのバグは修正されていた。gedit自体のバージョンアップをしようとすると、多くの依存ライブラリのバージョンアップも必要になってしまうので、できればそのままのバージョンで何とかしたい。
いろいろ情報を探していたが、英語でもこの問題が解決に至った話はなかなか見つけられなかった。

gedit.command.load_uriを使う

あきらめかけてた時にたまたま検索して見つけたのがgithubに上がってたこのリポジトリ

gedit2が対象みたいだし、ファイルを開くプラグインのようだったので、どうやっているのか早速ソースを読んだ。
すると、gedit.command.load_uriという関数を使っている。
試してみたところ、これだと問題なく動作した。

gedit.command.load_uri(window, uri, gedit.encoding_get_utf8())

gedit.commandはドキュメントになかったので辿りつけなかったのだけど、まあ解決してヨカッタ。