首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GTK2与GTK3:在bash脚本中检测GTK3主题

GTK2与GTK3:在bash脚本中检测GTK3主题
EN

Stack Overflow用户
提问于 2019-01-25 12:18:21
回答 1查看 626关注 0票数 0

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2019-01-27 04:01:37

单线:

代码语言:javascript
复制
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

有点可读性:

代码语言:javascript
复制
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

在此之后,您可以只使用echo "$Gtk3ThemeName"打印主题名称。

如果没有安装GTK3 (或者gccpkg-config失败,或者/tmp/不是可写的或者是运行保护的),那么变量最终将为空。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54365212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档