GLib.utf8_collate_key_for_filename

我がアプリの GTK+ 3 化を進めていく予定であったのだが…
Gst 関連がどうしても上手くいかなくて更新が止まっている…
clipoli も xpm を読み込む方法がイマイチ解らない…

とにかく解った部分から書き出していこう。
そういえばコレは PyGI からなら呼び出しできるのかな?

utf8_collate_key | PaePoi

GLib で普通に g_utf8_collate_key_for_filename が見つかった。
よし試してみよう。

from gi.repository import GLib

l = [
"40.txt",
"200.txt",
"001.txt",
"02.txt",
"03.txt",
"123456.txt"]

l.sort(lambda x, y : cmp(GLib.utf8_collate_key_for_filename(x, -1), GLib.utf8_collate_key_for_filename(y, -1)))

for s in l:
    print s

''' output
001.txt
02.txt
03.txt
40.txt
200.txt
123456.txt
'''

うん Nautilus 名前順ソートと同じ数値優先順になるね。
もう ctypes という危なっかしいものを使わなくて済みそう。

しかし今更ながら GLib って色々できるんだね。
たとえば日本語を含む UTF-8 文字列の長さを得る関数もある。
(バイト数では日本語は 2〜3 byte になる)
(そうそう、max バイト数未指定の場合は -1 を指定する)

Unicode Manipulation

from gi.repository import GLib
GLib.utf8_strlen("ちゆ12さい", -1) #=> 6L
len("ちゆ12さい") #=> 14

Windows API もこんな感じだったらもっと面白かったのにな。