
Mi dmenu no puede detectar la fuente emoji de color noto. Puede detectar otras fuentes pero no ésta. ¿Cómo solucionar esto?
➜ 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.
Respuesta1
A varias herramientas inútiles les gusta dmenu
y st
utilizan una biblioteca llamada libxft
para manejar la representación de fuentes. Esta biblioteca tiene un error que le impide representar fuentes de color.Afortunadamente, este error se ha solucionado., pero por alguna razón no se ha fusionado en sentido ascendente. Por lo tanto, para que las fuentes de color funcionen, debe instalar esta versión parcheada libxft
y luego eliminar una marca dmenu
que deshabilita manualmente las fuentes de color (debido a este error). He escrito los pasos manuales para hacer esto a continuación, pero como solución más sencilla, puedes instalar esta bifurcación dmenu
que hace esto por ti:https://github.com/valeriangalliat/dmenumoji
Pasos manuales
En arch linux puede instalar una versión parcheada libxft
(que reemplaza la versión anterior) con este paquete:libxft-bgra. En otras distribuciones necesitarás descargar la fuente de libxft,aplique el parchey luego compilar e instalar manualmente la versión parcheada de libxft.
Una vez que tenga la biblioteca parcheada, deberá editar el código fuente de dmenu para eliminar el código que desactiva las fuentes de color (anteriormente rotas). Esta verificación está cerca de la parte superior drw.c
y se ve así:
/* 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;
}
¡Elimine este fragmento de código y vuelva a compilar dmenu y podrá usar fuentes de color!Aquí hay una publicación de blog.