如何找到 .desktop 文件的所有属性(名称、图标等)?
How to find all of the attributes (name, icon, etc) of .desktop file?
我正在尝试创建一个使用 .desktop 文件的应用程序启动器。我想知道其他应用程序启动器使用什么来查找所述属性。我想也许我可以使用 awk
。但是,尝试查找 name
可能会显示 name[es]
和其他外语。我还找到了一个工具 desktoptojson
,可以将 .desktop 文件转换为 json。但是,我想知道是否有比这更有效的方法。
由于这是 GTK 标签,我将使用 GLib 给出答案。
尝试GAppInfo。您可以使用 g_app_info_get_all
获取系统上所有应用程序的列表,然后获取它们的名称、图标等。它可以处理本地化,甚至有启动应用程序的方法。
它应该会自动检测默认位置中的 .desktop 文件,但如果您想获取特定文件的 GAppInfo,请使用 g_desktop_app_info_new_from_filename。
James Westman 关于使用 g_app_info_get_all()
的回答很好,但我对如何使用这些函数困惑了很长时间。
g_app_info_get_all
returns 一个 GList
结构。我发现 reference page 展示了 GList
是如何工作的。我修改了它的第一个代码片段以适应 g_app_info_get_all()
:
GList *some_list, *l;
some_list = g_app_info_get_all(); /*This is where the GList function goes
for (l = some_list; l != NULL; l = l->next)
{
gpointer element_data = l->data;
printf("%s\n", g_app_info_get_display_name(element_data)); /*print out all of the display names of the .desktop files */
}
return 0;
我将此代码放入 int main
的新 C 文件中,添加 #include <gio/gio.h>
,像编译任何 GTK 文件一样编译文件(阅读手册),程序输出每个 .桌面文件的名称。
我正在尝试创建一个使用 .desktop 文件的应用程序启动器。我想知道其他应用程序启动器使用什么来查找所述属性。我想也许我可以使用 awk
。但是,尝试查找 name
可能会显示 name[es]
和其他外语。我还找到了一个工具 desktoptojson
,可以将 .desktop 文件转换为 json。但是,我想知道是否有比这更有效的方法。
由于这是 GTK 标签,我将使用 GLib 给出答案。
尝试GAppInfo。您可以使用 g_app_info_get_all
获取系统上所有应用程序的列表,然后获取它们的名称、图标等。它可以处理本地化,甚至有启动应用程序的方法。
它应该会自动检测默认位置中的 .desktop 文件,但如果您想获取特定文件的 GAppInfo,请使用 g_desktop_app_info_new_from_filename。
James Westman 关于使用 g_app_info_get_all()
的回答很好,但我对如何使用这些函数困惑了很长时间。
g_app_info_get_all
returns 一个 GList
结构。我发现 reference page 展示了 GList
是如何工作的。我修改了它的第一个代码片段以适应 g_app_info_get_all()
:
GList *some_list, *l;
some_list = g_app_info_get_all(); /*This is where the GList function goes
for (l = some_list; l != NULL; l = l->next)
{
gpointer element_data = l->data;
printf("%s\n", g_app_info_get_display_name(element_data)); /*print out all of the display names of the .desktop files */
}
return 0;
我将此代码放入 int main
的新 C 文件中,添加 #include <gio/gio.h>
,像编译任何 GTK 文件一样编译文件(阅读手册),程序输出每个 .桌面文件的名称。