手动步骤

手动步骤

我的 dmenu 无法检测 noto color emoji 字体。它可以检测其他字体,但检测不到这个字体。如何解决这个问题?

➜ fc-list | grep -i "notocoloremoji"
/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf: Noto Color Emoji:style=Regular
➜ dmenu -fn "Noto Color Emoji"
no fonts could be loaded.

答案1

一些 suckless 工具(例如dmenust使用一个名为的库libxft来处理字体渲染。此库有一个错误,导致它无法渲染彩色字体。幸好这个bug其实已经修复了,但不知何故尚未合并到上游。因此,要使彩色字体正常工作,您需要安装此修补版本libxft,然后删除手动禁用彩色字体的检查dmenu(由于此错误)。我已在下面写下了执行此操作的手动步骤,但作为更简单的解决方案,您只需安装此 fork 即可dmenu为您完成此操作:https://github.com/valeriangalliat/dmenumoji

手动步骤

在 arch linux 上,你可以用这个包安装一个修补版本libxft(替换旧版本):库xft-bgra. 在其他发行版中,您需要下载 libxft 的源代码,应用补丁,然后手动编译安装修补版本的libxft。

获得修补后的库后,您需要编辑 dmenu 的源代码以删除禁用(以前损坏的)彩色字体的代码。此检查位于顶部附近drw.c,如下所示:

    /* Do not allow using color fonts. This is a workaround for a BadLength
     * error from Xft with color glyphs. Modelled on the Xterm workaround. See
     * https://bugzilla.redhat.com/show_bug.cgi?id=1498269
     * https://lists.suckless.org/dev/1701/30932.html
     * https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=916349
     * and lots more all over the internet.
     */
    FcBool iscol;
    if(FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) {
        XftFontClose(drw->dpy, xfont);
        return NULL;
    }

删除这段代码并重新编译 dmenu 您将能够使用彩色字体!这是一篇博客文章

相关内容