Nautilus と Dolphin と GnomeVFS

Nautilus の D&D で送られてくる text/uri-list で何を今頃気がついた。
これって CRLF 区切りなのか、Dolphin の場合は LF 区切りの URI が送られてくる。

ぱぇぽぃ2 ? Blog Archive ? Get MIME Type and Description

上記に書いたコードのように今まで URI の最後の一文字を削除していた。
たまたまそうやったら上手くいったからずっとそうしてきただけだったりする。
CR の存在を今まで知らずにアプリを作っていたのか、反省。
ということは

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

import gtk
import gnomevfs

class MimeWin2(gtk.Window):
    """
        Showing MIME Type and Description of Dropped file
    """
    def __init__(self):
        gtk.Window.__init__(self)
        dnd_list = [("text/uri-list", 0, 0)]
        self.drag_dest_set( gtk.DEST_DEFAULT_MOTION |
                            gtk.DEST_DEFAULT_HIGHLIGHT |
                            gtk.DEST_DEFAULT_DROP,
                            dnd_list, gtk.gdk.ACTION_MOVE )
        self.connect("drag_data_received", self.on_drop)
        self.label = gtk.Label("Drop")
        self.add(self.label)
        self.connect("delete-event", gtk.main_quit)
        self.resize(320, 150)
        self.show_all()

    def on_drop(self, widget, context, x, y, selection_data, info, time):
        if "\r\n" in selection_data.data:
            drops = selection_data.data.split("\r\n")
        else:
            drops = selection_data.data.split("\n")
        for drop in drops:
            if not drop == "":
                name = drop
                mime = gnomevfs.get_mime_type(name)
                desc = gnomevfs.mime_get_description(mime)
                self.label.set_text("MIME Type = %s\nDescription = %s" % (mime, desc))

if __name__ == "__main__":
    w = MimeWin2()
    gtk.main()

gnomevfs

こうすれば Nautilus でも Dolphin でも対応できるじゃないの。
てか改行コードが違うだけで text/uri-list が送られてくるのは同じなのか。
KDE の Mandriva でも GnomeVFS から普通に MIME Type を取得できるのは驚いた。
ま、そうじゃないと Firefox や Totem が動かせないか、納得。

ところでスクリプトの扱いが Nautilus と Dolphin では随分違うなぁ。
シェルスクリプトだと実効パーミッションでもダブルクリックで実効できない。
Python スクリプトだと逆に Nautilus のように質問は無くていきなり実効してしまう。
bash からだとまったく同じ、そりゃそうか。

私が実効スクリプトを分けて配布しているのは完全に自分の都合。
python スクリプトをダブルクリックだけで gedit で開けるからという単純な理由です。
Mandriva で使うことを考えて実効スクリプトを Python スクリプトにすればいいかなと。

ということでソコを書き換えたら Y901x は再生できるようになった。

baseboll

後は dbus と wnck をなんとかすれば Mandriva もサポートできる。
リポジトリにはあるんですけどね。

python_dbus