memopolix 0.0.0

gjots2 の代わりを現在作っている。
Read in gjotsfile | PaePoi

躓きまくっているので Blog の更新が止まりぎみですが…
勉強だけやっていても面白くないし進歩もない、とにかく何か作りたい。
実際にアプリケーションを作ってみないと解らないことが結構多いですから。

アプリ名と仕様を考えるのに一番時間を使ったのだが…
名前ごときに時間を割いてもしかたがない、memopolix でいいや。
***poli で x を末尾につける、このパターンはつまり(以下略

ファイル仕様は gjots2 完全互換、但しコピーして元ファイルは汚さないように。
本体ツールバーはメインツールバーに保存と移動矢印のみとする。
それと一行めだったタイトルを GtkEntry に分離、ファイルはそのまま。
拡張するのは v2 からでいいだろう、もし拡張するならだが。
とにかく徹底的にシンプル、よし仕様はこんなものだろう。

Gio での Streaming I/O も解ったことだし限界まで Python 標準モジュールを使わずに gi を利用する。
そうしておけば Seed や Vala からも参考にできるという理由だが。
gnome-games の Swell Foop って Seed と Clutter で作っているんだね。

せっかくなので gettext で国際化してみたい。
コレは python モジュールを利用するしか無いみたい。

$ xgettext ui.py #=> messages.po
$ # Rewrite messages.po
$ msgfmt messages.po #=> messages.mo
$ mv messages.mo ja/LC_MESSAGES
import gettext
import os

gettext.bindtextdomain('messages', os.path.dirname(__file__))
_ = gettext.gettext

色々調べてみたけどコレが一番簡単だった。
インストールせずに使いたいので /usr/share/locale には入れたくないし。
ところで GtkActionEntry に stock_id 指定を行い label を None にすれば勝手に国際化表記なメニューやツールバーになるんだね、今頃知ったよ。
Opera とかみたいに自力でやったほうが簡単なことは内緒だよ。
Seed からは _ = imports.gettext.gettext; で使える。

それと GtkActionEntry で <shift><control><alt>Down なんてキーを割り付け上下移動させようと思ったけど GNOME3 では仮想デスクトップの移動になってしまう、<control>D とかにするのも、うーん。
割り付け無しのほうが潔いか。

それより詰まったのはファイルの書き込みだった。
GtkListstore なら seemex でやったけど GtkTreeStore はどうすれば?
再起を使えばいいということは解るけどイザ手段となると全然掴めない。

自力を諦めて素直に gjots2 のコードを参考にする。
SourceArchive.com

def tree_all_text(self, store, it, first):
    if not first:
        self.result += "\\NewEntry\n"
    body = store.get_value(it, 1)
    self.result += body
    if body and not body[-1] == "\n":
        self.result += "\n"
    it_child = store.iter_nth_child(it, 0)
    if it_child:
        if not first:
            self.result += "\\NewFolder\n"
        while it_child:
            self.tree_all_text(store, it_child, 0)
            it_child = store.iter_next(it_child)
        if not first:
            self.result += "\\EndFolder\n"

def write_file(self, store):
    self.result = ""
    it = store.get_iter_first()
    if it:
        self.tree_all_text(store, it, 1)
    f = open("test.txt", "w")
    f.write(self.result)
    f.close()

手段が解ってしまえば「なるほど〜」なんだけど再起ってムズい。
コレを分離する予定な一行めタイトルを入れる処理に変更しなきゃ…
読み取りは簡単なのにまさか書き込みがこんなに難しいとは。
やっぱり実際にアプリを作ってみないと解らないコトって多い。

先はまだ長い、まだ移動処理すら手をつけていない状態。
まあ Y901x は安定させるまでに二年掛かったしこんなものだ。
しかしツリーメモとしか使っていなかったけど gjots2 は多機能なのね。
memopolix は単なるツリーメモでいくけど gjots GTK3 版が出たらどうしよう?

一応バックアップ。
memopolix-0.0.0.tar.gz