4

在 Vala 的默认应用程序中打开文件的最佳方式是什么?有点像xdg-open工作原理。

4

3 回答 3

6

我在另一个应用程序中找到了一些现有代码,但后来我也找到了这种 GLib.AppInfo.launch_default_for_uri方法。

一个简单的例子:

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);
    }
}
于 2019-02-26T23:27:19.787 回答
1

如果您使用的是 GTK,那么您还拥有Gtk.gtk_show_uri_on_window(),它在引擎盖下使用了 GLib 的东西。

于 2019-02-27T07:40:22.787 回答
0

据我所知,相关的 freedesktop.org 标准只有一种实现。

这是 xdg-utils 中的参考实现:

https://www.freedesktop.org/wiki/Software/xdg-utils/

这些工具是用 shell 脚本编写的,例如这里是源代码xdg-open

https://cgit.freedesktop.org/xdg/xdg-utils/tree/scripts/xdg-open.in

所以到目前为止,最简单的方法是通过Process.spawn_async和朋友调用 xdg-open 脚本。

如果您坚持使用库函数,则必须自己实现符合标准的库。

更新:

有很多不同语言的库实现了一些 freedesktop.org 标准,例如这里是 GitHub 上的列表:

https://github.com/topics/xdg

例如,这里有一个类似用 D 编写的 xdg-open 的工具:

https://github.com/FreeSlave/mimeapps/blob/master/source/mimeapps.d

到目前为止,我还没有找到可以从 Vala 应用程序轻松使用的 Vala / GLib 或纯 C 库。

更新 2:

实际上,在 GLib 中(或者更准确地说是在 Gio 中)有一些用于此目的的东西:

https://valadoc.org/gio-2.0/GLib.AppInfo.launch_default_for_uri_async.html

https://developer.gnome.org/gio/stable/GAppInfo.html

所以你应该可以使用该GLib.AppInfo.launch_default_for_uri_async方法。

于 2019-02-26T15:04:21.400 回答