Quelle est la meilleure façon d'ouvrir un fichier dans l'application par défaut de Vala?
Un peu comme le fonctionnement de xdg-open
.
3 Réponses :
Pour autant que je sache, il n'existe qu'une seule implémentation des standards freedesktop.org pertinents.
C'est l'implémentation de référence dans xdg-utils:
https://www.freedesktop.org/wiki/Software/xdg- utils /
Les outils sont écrits en script shell, par exemple voici le code source de xdg-open
:
https://cgit.freedesktop.org /xdg/xdg-utils/tree/scripts/xdg-open.in
Donc, de loin, le moyen le plus simple est d'appeler simplement le script xdg-open via Process.spawn_async
et ses amis.
Si vous insistez pour utiliser une fonction de bibliothèque, vous devrez implémenter vous-même une bibliothèque standard conforme.
<₹Update:
Il existe de nombreuses bibliothèques dans différents langages qui implémentent certaines des normes freedesktop.org, par exemple voici une liste sur GitHub:
Par exemple, voici un outil similaire à xdg-open écrit en D:
https://github.com/FreeSlave/mimeapps/blob /master/source/mimeapps.d
Ce que je n'ai pas trouvé jusqu'à présent, c'est une bibliothèque Vala / GLib ou C ordinaire qui pourrait facilement être utilisée à partir d'une application Vala.
Mise à jour 2:
En fait, il s'avère qu'il y a quelque chose à cet effet dans GLib (ou plus précisément dans Gio):
https://valadoc.org/gio-2.0/GLib.AppInfo .launch_default_for_uri_async.html
https://developer.gnome.org/gio/stable/GAppInfo.html
Vous devriez donc pouvoir utiliser la méthode GLib.AppInfo.launch_default_for_uri_async
.
J'aimerais que StackOverflow ait un système de notification mieux conçu, je viens de lire votre réponse. Je suis également tombé sur la même fonction à la fin. J'ai inclus un exemple.
J'ai trouvé du code existant dans une autre application, mais plus tard j'ai aussi trouvé ceci
GLib.AppInfo.launch_default_for_uri
méthode.
Un exemple simple:
var file = File.new_for_path (file_path); if (file.query_exists ()) { try { AppInfo.launch_default_for_uri (file.get_uri (), null); } catch (Error e) { warning ("Unable to launch %s", file_path); } }
Si vous utilisez GTK, alors vous avez également Gtk.gtk_show_uri_on_window ()
, qui utilise les éléments GLib sous le capot.
Pourriez-vous clarifier la différence? Je suis curieux de savoir pourquoi il inclut "on_window". Pourriez-vous inclure ce lien vers les documents? valadoc.org/gtk+-3.0/Gtk.show_uri_on_window.html
Gtk.gtk_show_uri
et Gtk.gtk_show_uri_on_window
font tous deux la même chose, mais ce dernier fonctionne mieux pour les applications packagées sous Flatpak où le portail, un processus séparé, ouvre en fait l'URI . Il permet au portail de savoir sur quel bureau, etc. il doit ouvrir l'application.