Created
December 19, 2013 12:47
-
-
Save PotatoesMaster/8038613 to your computer and use it in GitHub Desktop.
A simple daemon implementing freedesktop.org's file manager interface.This interface is used by Firefox download manager to select a downloaded file in the file manager (since Firefox 28).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# This program is free software. It comes without any warranty, to the extent | |
# permitted by applicable law. You can redistribute it and/or modify it under | |
# the terms of the Do What The Fuck You Want To Public License, Version 2, as | |
# published by Sam Hocevar. See http://www.wtfpl.net/ for more details. | |
""" | |
This is a simple daemon implementing freedesktop.org's file manager interface | |
(http://www.freedesktop.org/wiki/Specifications/file-manager-interface/). | |
""" | |
import gobject | |
import dbus | |
import dbus.service | |
import dbus.mainloop.glib | |
import os | |
from subprocess import Popen | |
def open_file_manager(uri, select=False): | |
args = ['urxvt', '-e', 'ranger'] | |
if select: | |
args.append('--select') | |
path = str(uri) | |
if path.startswith('file://'): | |
path = path[7:] | |
args.append(path) | |
if os.fork() == 0: | |
Popen(args) | |
os._exit(0) | |
else: | |
os.wait() | |
class FmObject(dbus.service.Object): | |
@dbus.service.method("org.freedesktop.FileManager1", | |
in_signature='ass', out_signature='') | |
def ShowFolders(self, uris, startupId): | |
open_file_manager(uris[0]) | |
@dbus.service.method("org.freedesktop.FileManager1", | |
in_signature='ass', out_signature='') | |
def ShowItems(self, uris, startupId): | |
open_file_manager(uris[0], select=True) | |
@dbus.service.method("org.freedesktop.FileManager1", | |
in_signature='ass', out_signature='') | |
def ShowItemProperties(self, uris, startupId): | |
open_file_manager(uris[0], select=True) | |
@dbus.service.method("org.freedesktop.FileManager1", | |
in_signature='', out_signature='') | |
def Exit(self): | |
mainloop.quit() | |
if __name__ == '__main__': | |
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) | |
session_bus = dbus.SessionBus() | |
name = dbus.service.BusName("org.freedesktop.FileManager1", session_bus) | |
object = FmObject(session_bus, '/org/freedesktop/FileManager1') | |
mainloop = gobject.MainLoop() | |
mainloop.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I got a modified version of this working yesterday:
https://gist.github.com/ljb/30a21952158dfe59c8168d7248176e3b
My solution uses another terminal and
vifm
instead ofranger
. But that can easily be changed.But maybe https://github.com/GermainZ/xdg-desktop-portal-termfilechooser is a cleaner solution.