【问题标题】:Accessing custom XResources colors with X11使用 X11 访问自定义 XResources 颜色
【发布时间】:2019-11-03 00:43:51
【问题描述】:

我刚刚使用 X11 库开始了我的第一个程序。首先,我只是尝试从xrdb 中定义的用户配色方案中访问颜色。例如,在我的~/.Xresources 我有类似的东西:

*color8:     #073642
*color0:     #002b36

我还验证了当我运行xrdb -query 时会显示这些颜色。到目前为止,在我的 C 程序中,我有:

#include <X11/Xlib.h>
#include <X11/Xresource.h>

int main (int argc, char *argv[])
{
    Display* display = XOpenDisplay (0);
    XrmDatabase xrdb = XrmGetDatabase (display);
    XrmValue v;
    Colormap cmap = DefaultColormap (display, DefaultScreen (display));
    XColor screenColor;
    XColor exactColor;

    if (! XAllocNamedColor (display, cmap "color0", &screenColor, &exactColor))
        printf ("ERROR\n");

   printf ("%u %u %u\n", screenColor.red, screenColor.green, screenColor.blue);

   return 0;
}

但是这个错误。那么我错过了什么?有没有更好的方法来做我想做的事情?谢谢!

【问题讨论】:

  • 您需要使用xrdb -merge 或类似的方式让X 服务器查看这些值。
  • 对,做到了。需要明确的是,这些自定义颜色会在我执行 xrdb -query 时出现
  • Color0 不是命名颜色,它是资源数据库中的一个键。您需要从 xrdb 中显式获取相应的值,然后为其分配一个颜色。
  • 您能详细说明一下吗?我的代码中需要更改什么?
  • 你或多或少地选择班级。您可以尝试"*"(任何课程)。类型是函数返回的,不需要推导。谷歌xrmgetresource color,你会得到一些有指导意义的代码示例。

标签: c x11 xlib


【解决方案1】:

当你想访问xrdb加载的Xresource文件中设置的参数时,你需要

xrdb = XrmGetStringDatabase(XResourceManagerString(display));

而不是XrmGetDatabase(...)。希望(最近)解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多