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() |
I got a modified version of this working yesterday:
https://gist.github.com/ljb/30a21952158dfe59c8168d7248176e3b
My solution uses another terminal and vifm
instead of ranger
. But that can easily be changed.
But maybe https://github.com/GermainZ/xdg-desktop-portal-termfilechooser is a cleaner solution.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi @vitaly-zdanevich.
The goal of the script is to open ranger (a file manager for the terminal) when "open directory" is clicked/actioned for a downloaded file in Firefox.
This program is intended to work as a daemon, meaning you run it in the background all the time (during the user session) for it to be able to respond to events when they happen.
I do not know if this script is still working 10 years later.
I read here that you may need to change some Firefox config: https://wiki.archlinux.org/title/Firefox (section 4.4 XDG Desktop Portal integration).
Also as of now, I would personnaly use a more robust implementation rather than this loosy script with hardcoded command. 🙂
See for example https://github.com/GermainZ/xdg-desktop-portal-termfilechooser