3
votes

Ouvrir le fichier avec l'application par défaut de Vala?

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 .


0 commentaires

3 Réponses :


0
votes

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:

https://github.com/topics/xdg

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 .


1 commentaires

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.



4
votes

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);
    }
}


0 commentaires

1
votes

Si vous utilisez GTK, alors vous avez également Gtk.gtk_show_uri_on_window () , qui utilise les éléments GLib sous le capot.


2 commentaires

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.