X11 - 如何获得系统颜色?

标签 x11

我正在使用 X11 库。是否可以获得系统颜色?我的意思是从当前的用户主题,如面部、高亮颜色等。我不能使用 GTK 和 QT 库。是否存在通过某些环境变量或 freedesktop 获取颜色的方法?

问候

最佳答案

为一些严重的痛苦、困惑和愤怒做好准备。一切都可能如此简单,Qt 和 GTK+/GNOME 不是 NIH 综合症的严重病例吗。

在 X11 中有一个名为 X 资源数据库 的系统,它实际上是一个 key → value 存储,其中 key 和 value 都是字符串并包含在根的属性中 window 。您可以使用 xrdb 工具访问它。任何行为良好的 X11 程序都使用此 X 资源数据库 将其外观调整为用户设置的外观。

传统的X11工具包,Motif、Tk、Athena、Xaw3等都符合这一点。一切都很好。并且由于设置了一组简单、明确的模式匹配规则,几乎每个方面和每个小部件都可以通过这种方式设置主题。

当 GTK+ 和 Qt 诞生时,它们也遵循 Xrdb。但很快 GTK+ 和 Qt 开发人员说“这不是我们的设计,我们按照自己的方式来做”,因此 GTK+ 和 Qt 从用户主目录中的点文件中检索它们的设置。并且出于兼容性原因,也尊重一些,但不是全部,并且每个版本都有一组不同的 Xrdb key 。

当然,桌面库应该协同工作,因此诞生了很多设置管理系统:Elektra、gconf、dconf、uconf,以及专门用于 X11 Xsettings。 gconf、dconf、uconf 当然不使用 X11 协议(protocol),而是使用专有的 IPC 或 DBus。 DBus 本身是有缺陷的。

然而,Xsettings 是一个充满矛盾的规范,几乎没有 Xrdb 那样好用。 Xsettings 存在的主要“原因”是,以便客户可以了解更改,因为所有设置都由 Xsettings 守护程序管理,而不是根窗口上的属性,通知屏幕上的所有客户更改。如果守护进程死了,一切都会恢复到默认状态,因为客户端应该注册 Xsettings 守护进程的 InputOnly 属性持有者窗口消失时发出的事件。 Xsetting wahrrrgarrrbl 我只有一个词。

Xsettings 的创建者显然从未想过更改窗口的属性会自行创建一个 X 事件,从而允许客户端监听设置更改。此外,仅了解设置更改是没有意义的,因为这需要所有客户端跟踪其本地设置状态,即使它们的某些内部设置仅间接依赖于某些设置。解析整个 Xrdb 更容易,更不容易出错,并且只处理更改设置的一个子集的理论上的开销节省与设置不会一直更改形成鲜明对比。


它在我的一长串 TODO 列表中,去除 Qt 和 GTK+ 的整个 gconf、dconf、uconf、Xsettings 及其专有的配置点文件困惑,让它们只使用 Xrdb。

关于X11 - 如何获得系统颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16254895/

相关文章:

X11:通过命令行提升现有窗口?

macos - 所有 X11 应用程序在 Mac OSX Yosemite 中都不可用

animation - 流畅的 PostScript 动画

linux - X/侏儒 : How to measure the geometry of an open window

macos - Mountain Lion X11 库无法 ./configure

python - 从python中的keycode获取keysym

docker - Docker 容器内部 : "Error: cannot open display: localhost:11.0"

graphics - 如何直接在屏幕上书写?

c - 我需要做什么才能链接到 xlib?

c - X 窗口 id 0 是什么意思 - 未创建窗口?