From 81715cabc7c040190294671bdde9994c01fe9186 Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Sun, 17 May 2020 13:23:47 +0200 Subject: [PATCH] bin: add xdg-app-chooser --- bin/xdg-app-chooser | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100755 bin/xdg-app-chooser diff --git a/bin/xdg-app-chooser b/bin/xdg-app-chooser new file mode 100755 index 0000000..c793291 --- /dev/null +++ b/bin/xdg-app-chooser @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 + +"""Simple application selector relying on GTK app chooser dialog. +""" + +import argparse +import sys +import gi + + +parser = argparse.ArgumentParser(description=sys.modules[__name__].__doc__) +parser.add_argument("file", + metavar="FILE", + help="file to open") +options = parser.parse_args() + +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk, Gio + +# Query MIME TYPE +f = Gio.File.new_for_path(options.file) +file_info = f.query_info("standard::content-type", 0) +content_type = file_info.get_content_type() + +# Display app chooser dialog box +dialog = Gtk.AppChooserDialog.new_for_content_type(None, + Gtk.DialogFlags.MODAL, + content_type) +dialog.get_widget().set_show_default(True) +dialog.get_widget().set_show_fallback(True) +response = dialog.run() + +# Execute the selected program +if response == Gtk.ResponseType.OK: + app_info = dialog.get_app_info() + dialog.destroy() + # TODO: make it launch synchronously + sys.exit(0 + if app_info.launch([f]) + else 1) +sys.exit(1)