GTK2 vs.GTK3:在bash脚本中检测GTK3主题

时间:2019-01-25 12:18:21

标签: linux bash gtk gtk3 gtk2

我们基于Java / SWT的应用程序在Linux上使用bash启动脚本。我们需要确定是使用GTK2(较旧的SWT版本)还是用GTK3(较新的SWT版本)启动,因为最新的SWT版本不再支持GTK2,并且在不支持GTK3或较旧的GTK3版本的较旧系统上引起问题。尤其是GTK3主题(!= Adwaita或Ambiance)会引起问题。

如果系统支持GTK3,如何(在bash脚本中)找出配置了什么GTK3主题?可选:找出系统上有哪些GTK3主题?

更新:也可以使用类似于this answer的小型C应用程序。

1 个答案:

答案 0 :(得分:1)

单线:

@bot.event
async def on_message(message):
  memberName=message.author
  roleCharacter = ("Parasoul", "Valentine", "Big Band", "Peacock", "Robo Fortune", "Ms. Fortune", "Beowulf", "Cerebella", "Filia", "Fukua", "Double", "Eliza", "Painwheel", "Feelme", "SG")
  role_name = ""
  if message.content.startswith('!roles'):
    for i in roleCharacter:
      if i in message.content:
        role_name = i
        break
    await bot.add_roles(memberName,discord.utils.get(message.server.roles, name=role_name))
    return

更具可读性:

Gtk3ThemeName=/tmp/$RANDOM$$ && gcc -o $Gtk3ThemeName -include stdio.h -include gtk/gtk.h -xc <(echo 'int main() {gchar *prop; gtk_init(0, 0); g_object_get(gtk_settings_get_default(), "gtk-theme-name", &prop, 0); return !printf("%s\n", prop);}') $(pkg-config gtk+-3.0 --cflags --libs 2>/dev/null) 2>/dev/null && Gtk3ThemeName="$($Gtk3ThemeName && rm $Gtk3ThemeName)" || unset Gtk3ThemeName

之后,您可以Gtk3ThemeName=/tmp/$RANDOM$$ if gcc -o $Gtk3ThemeName -include stdio.h -include gtk/gtk.h -xc <(echo ' int main() { gchar *prop; gtk_init(0, 0); g_object_get(gtk_settings_get_default(), "gtk-theme-name", &prop, 0); return !printf("%s\n", prop); }') $(pkg-config gtk+-3.0 --cflags --libs 2>/dev/null) 2>/dev/null; then Gtk3ThemeName="$($Gtk3ThemeName && rm $Gtk3ThemeName)" else unset Gtk3ThemeName fi 打印主题名称。

如果未安装GTK3(或者echo "$Gtk3ThemeName"gcc失败,或者pkg-config不可写或不受运行保护),则变量最终将为空。