
Мой 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, и вы сможете использовать цветные шрифты!Вот запись в блоге.