テンプレートとスクリプト

nanikore

Nautilus にあるこのテンプレートって何だろうと気になった。
多分よく使うテンプレートをコピーして新規作成してくれる機能だと思う。
私だったら当然

#!/usr/bin/env python
#-*- coding:utf-8 -*-

とかかな、「 py 」って打って Tab キーを押すだけでスニペットが挿入してくれるけど。
それでもあったほうが便利かなと思うので使い方を探す、が見つからないんですけど。
せっかく堂々とメニューに乗っているのに誰も使っていないのかな?

でも調べているうちにスクリプトで Nautilus が拡張できると知った(今頃…
面白そうと思って早速作ってみた、これで端末のお世話になる時間が減りそうだ。

Nautilus をスクリプトで拡張

しかし gedit といい Nautilus といい gimp といい Eye of GNOME といい…
Opera と自作以外は標準アプリしか使っていないのを思い知る。

しかし他のモンをあんまりインストールしていないので私の 9.04 は超安定しています。

Shift-JIS で読み直しする gedit pligin

Windows から持ってきた Shift-JIS なテキストファイルを gEdit にドロップで開くと文字化け。
Cinema や minipoli のコードを「俺どう書いたっけ?」と自分で参考にする時が結構あるのよ。
もう慣れてしまったけど毎回毎回読み直しするのも面倒になってきた。

Gedit/PythonPluginHowTo – GNOME Live!

一旦破棄して gedit.Encoding 指定で読み込めばプラグインで作れそうだ。
create_tab_from_uri の引数で行ジャンプまで指定できるんだ、これは面白そう。

ということでさっき Shift-JIS で読み直しするプラグインをこさえて本サイト更新!
製作時間は一時間、あぁプラグインは楽でいい。

EUC-JP も考慮しようかと思ったけど私は現在 EUC-JP なファイルを持っていない…
それより意図的に私が作らないほうが「作ってみようかな?」という人が出てくるかも。
なんて思ったので Shift-JIS のみで公開することにした、手抜きじゃないですよ。

それと gEdit プラグインの応用 1 なんてページを増やした。
カーソル位置の GtkTextIter 取得方法くらいは解説しなきゃ誰も始められないかなと。
こんなのをチビチビ作っているが需要は微妙である。

次はサイドバーとかを使いたいんだが…アイデアが浮かばない。

止まりぎみ

覚書のページ更新を又始めたので blog は止まりぎみになるかも。

テキストや図形を描写する

自分で書いていながら目から鱗。
gyk.gdk.Color() で GdkColor を作る時って 16bit だったのか。
ずっと 8bit (0?255 まで)だと思っていた、やっぱり Windows が長すぎだ。
つーか自分は真っ黒しか使っていなかったので全部ゼロだったわけで。

しかしグラフィック・コンテキストは何でこんなにイッパイあるのだろう?
PAINTSTRUCT がやっている部分も全部コンテキストがやっているということかな。
あんまりよく解っていないまま適当に書いているので気にしないで。
多分 GLib から勉強すれば解るんだろうけど。

なんか自力で解説を作っていると勝手に勉強になって楽しい。

しかし、この blog へのアクセスも今月ついに Vista が Ubuntu を抜いた…
今年から Ubuntu と PyGtk のネタがほとんどなのに世間はそうなのね。

全滅状態のデルヒャァ屋さん達はコッチにいらっしゃい、待っているよ。
ティーエディタの代わりに Pygtksourceview2 もあるよ。
キャイリクスは捨ててね。

GtkTextView って内部は UNICODE なのかな

ちょっと gEdit のプラグインを弄くっていたのでありますが。

13.3. Text Buffers

を見てカーソル位置の GtkTextIter を得て後は多分コレでイケるだろうと作っていた。
上手くいったからイイのだろう、で、面白いことを見つけた。

def on_hoge_activate(self, action):
    # バッファを得る
    view = self._window.get_active_view()
    buf = view.get_buffer()
    try:
        # カーソル位置の GtkTextIter 取得
        pos = buf.get_property("cursor-position")
        it = buf.get_iter_at_offset(pos)
        # 一つ前の文字を得る
        it1 = buf.get_iter_at_offset(pos-1)
        s = it1.get_char()
        if s == "\n":
            return
        # 必要な変数を初期化してループ
        count = pos
        itnext = None
        itend = buf.get_end_iter()
        s1 = ""
        while 1:
            # 次の GtkTextIter を得る
            count += 1
            itnext = buf.get_iter_at_offset(count)
            # EOF
            if itnext.equal(itend):
                break
            # 文字を得て比較
            s1 = itnext.get_char()
            #
            # 表示してみる
            print s1
            #
            if s1 == "\n" or s1 == "。":
                break
            elif s == s1:
                # ここまでの範囲を print
                itnext = buf.get_iter_at_offset(count)
                text = it.get_text(itnext)
                print text
                break
    except Exception, s:
        self.messagebox("%s" % s)

とまあ説明しやすく?書き換えたけどカーソル位置から特定範囲の文字列を得る。
具体的にはカーソルの直前文字と同じ文字を見つけたら抜き出すコードです。

これでイイの?
だって Ubuntu って UTF-8 だよ、アルファベットは 1 バイト、日本語は 2?3 バイト。
というか Windows で文字列を弄くる時に絶対に問題になるんですよ文字コードは。
いやまて、get_char() で char を取り出したって結局はポインタなんだし。
でも漢字とか混ぜると破壊されるわけで、内部はどうなるんだろう?

ということで上のように途中で char を抜いた部分にて print してみることにした。
アルファベットとひらがなカタカナ漢字記号を混ぜた文を作って実験。

atom

あれ、char 配列になっていないじゃん。
_ismbslead みたいなことをしているのか内部で UNICODE 化しているか知らないけど.。
これは楽だ、 gEdit プラグインでは UTF-8 であることを意識しないでいいようです。

どうでもいいけど char って character の略なので「キャラ」と読みますお。

覚書

結局覚書ページの Python 関連は新しく PyGtk として作ることにした。

覚書のページ – L’Isola di Niente

GtkUIManager のほうをさっきまで作っていたけどパッキングの説明のほうが先だよなぁ普通。
ということで書き直ししている、解説する必要があるかどうかよく解らないけど。

こういうまとめを他に誰か、せめて大手が作らないのかなぁ。
今週の週刊アスキーも Ubuntu が載っていたがソフトウエアの紹介だけだし。
Windows と同じことしかしないのなら Linux は使いにくい Windows でしかないのに。
PyGtk もデフォルトで入っているんですよ。