如何找到 .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 文件一样编译文件(阅读手册),程序输出每个 .桌面文件的名称。