Ручные шаги

Ручные шаги

Мой 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

Несколько отстойных инструментов, таких dmenuкак и stиспользуют библиотеку, называемую libxftдля обработки рендеринга шрифтов. В этой библиотеке есть ошибка, которая не позволяет ей отображать цветные шрифты.К счастью, эта ошибка уже исправлена., но по какой-то причине не был объединен в апстрим. Поэтому, чтобы заставить работать цветные шрифты, вам нужно установить эту исправленную версию libxftи затем удалить проверку dmenu, которая вручную отключает цветные шрифты (из-за этой ошибки). Я написал ниже шаги для этого вручную, но в качестве более простого решения вы можете просто установить эту ветку , которая dmenuсделает это за вас:https://github.com/valeriangalliat/dmenumoji

Ручные шаги

На Arch Linux вы можете установить исправленную версию libxft(заменяющую старую версию) с помощью этого пакета:libxft-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, и вы сможете использовать цветные шрифты!Вот запись в блоге.

Связанный контент