Gio GFileEnumerator and load_contents

seed をやっている日本人がいた、あぁ日本語で読めるのは素晴らしい。
とはいえ海外でもあまり盛り上がっていないわけですが。
前ページを見て笑った、日本語で探すとそうなってしまうんだよ。

seedでGIOしてみる – ふとしの日記

なるほど、Gio でディレクトリ内容列挙したい場合はこうするのか。
引数は必ずしも JSON でなくてもいいのか?又解らないことが増えた。
while は for in 文でいいんじゃない?と思ったが…
そういえば JavaScript ではオブジェクトメソッドの列挙になるのよね。

ま、私は PyGI でヤルんですけど。
ということで $HOME のファイルを列挙するサンプルコード。
“standard::name” だと byte になるので “standard::display-name” にした。

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

import os
from gi.repository import Gio

# set Directory Name
d = Gio.file_new_for_path(os.path.expanduser("~"));
# Get GFileEnumerator
enum = d.enumerate_children(
        Gio.FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME,
        Gio.FileQueryInfoFlags.NONE,
        None )
for info in enum:
    # info: GFileInfo
    print info.get_display_name()

Python だと当然のように for in 文でイケるようだ。
seed は JavaScript の仕様そのままなので面倒かも。
逆に enumerate_children 等は引数を全部指定する必要がある。
seed は引数が曖昧でいいところもやっぱり JavaScript なのね。

ついでに Gio もう一つ、海外。
GIO tutorial: Stream IO ? Johannes Sasongko’s blog

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

import os
from gi.repository import Gio

# set File Name
fn = os.path.expanduser("~/.gtk-bookmarks")
# Create GLocalFile
f = Gio.File.new_for_path(fn)
# load_contents
result, contents, length = f.load_contents(None)
if result:
    print contents

で .gtk-bookmarks 内容が print される。
PyGtk を PyGI に書き換えしたのだが引数も戻り値も微妙に違った。
とにかくファイルの一騎読み込みはこうすればいいみたい。

でも stream のほうは PyGI では上手く行かない。
何か手段があるのだろうけど今はまだ Gio 勉強中。

# おまけ

fedora 16 アップデート通知に Gedit があった。

やっとドラッグアンドドロップ編集で落ちるのを修正してくれた!
ついやってしまっていったい何度書いたコードを無駄にしたことか。