
Meu dmenu não consegue detectar a fonte noto color emoji. Ele pode detectar outras fontes, mas não esta. Como resolver isso?
➜ 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.
Responder1
Várias ferramentas inúteis gostam dmenu
e st
usam uma biblioteca chamada libxft
para lidar com a renderização de fontes. Esta biblioteca possui um bug que a impede de renderizar fontes coloridas.Felizmente, esse bug foi corrigido, mas por alguma razão não foi mesclado no upstream. Portanto, para que as fontes coloridas funcionem, você precisa instalar esta versão corrigida libxft
e, em seguida, remover uma verificação dmenu
que desativa manualmente as fontes coloridas (por causa desse bug). Escrevi as etapas manuais para fazer isso abaixo, mas como uma solução mais fácil, você pode simplesmente instalar este fork que dmenu
faz isso para você:https://github.com/valeriangalliat/dmenumoji
Etapas manuais
No arch linux você pode instalar uma versão corrigida libxft
(substituindo a versão antiga) com este pacote:libxft-bgra. Em outras distros você precisará baixar o código-fonte do libxft,aplique o patche, em seguida, compile e instale manualmente a versão corrigida do libxft.
Depois de obter a biblioteca corrigida, você precisa editar a fonte do dmenu para remover o código que desativa as fontes coloridas (anteriormente quebradas). Esta verificação está perto do topo drw.c
e tem a seguinte aparência:
/* 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;
}
Remova este pedaço de código e recompile o dmenu e você poderá usar fontes coloridas!Aqui está uma postagem do blog.