Fonts 如何确定X11加载的字体名称?

Fonts 如何确定X11加载的字体名称?,fonts,x11,Fonts,X11,如果我使用以下方式加载字体: char *fName = (char *)"*-c-60-iso8859-1"; XFontStruct *font = XLoadQueryFont(disp, fName); 它可以是与通配符名称匹配的几种字体中的任意一种。 如何确定实际加载的文件的全名 [编辑]更正了通配符名称以匹配多个:-c-是-m-,但与任何名称都不匹配。[结束]这是字体的XA_FONT属性 #include <X11/Xlib.h> #include <X11/Xa

如果我使用以下方式加载字体:

char *fName = (char *)"*-c-60-iso8859-1";
XFontStruct *font = XLoadQueryFont(disp, fName);
它可以是与通配符名称匹配的几种字体中的任意一种。 如何确定实际加载的文件的全名


[编辑]更正了通配符名称以匹配多个:
-c-
-m-
,但与任何名称都不匹配。[结束]

这是字体的
XA_FONT
属性

#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char* argv[])
{
    Display* d = XOpenDisplay(0);
    if (!d)
    {
        fprintf (stderr, "Oops, can't open display\n");
        exit(EXIT_FAILURE);
    }

    while (*++argv)
    {
        XFontStruct* f = XLoadQueryFont(d, *argv);
        unsigned long ret;
        if (f == 0)
            printf ("XLoadQueryFont failed for %s!\n", *argv);
        else
        {
            if (!XGetFontProperty(f, XA_FONT, &ret))
                printf ("XGetFontProperty(%s, XA_FONT) failed!\n", *argv);
            else
                printf ("Full name for %s is %s\n", *argv, XGetAtomName(d, (Atom)ret));
        }
    }
    return 0;
}

很好。谢谢我现在也在试验Xft字体。Xft是一种方式,服务器端字体已经过时了。我甚至没有安装任何字体,除了强制性的固定字体。最后使用这个,它工作了。XLoadQueryFont()在近似我想要的东西方面做得很差。有些人我不会考虑贫穷,而是错误的结果。你想要什么?注意
XLoadQueryFont
是一个相当古老和成熟的API,您发现的任何错误都可能是误解的结果,而不是实际的错误。是的,我怀疑您是完全正确的。希望好吧,只是为了让我学得更快;)我想达到我工作的真正目的。顺便说一句,再次感谢你帮助它走得更快。
$ ./prog r14 9x15bold foo
Full name for r14 is -Misc-Fixed-Medium-R-Normal--14-130-75-75-C-70-JISX0201.1976-0
Full name for 9x15bold is -Misc-Fixed-Bold-R-Normal--15-140-75-75-C-90-ISO8859-1
XLoadQueryFont failed for foo!