Colored Characters and Emoji in Dwm


Dwm, dmenu atau st crash ketika render karakter berwarna ?

Untuk pengguna dwm yang mengalami crash ketika membuat status menggunakan karakter yang berwarna, atau ketika menulis catatan menggunakan vim/nvim dengan st dan menggunkan color emoji. Tenang ada beberapa solusi untuk mengatasinya antara lain :

  • Menginstall patch bgra dari libxft
  • Membuat st tidak merender karakter yang berwarna

Menginstall patch bgra

Untuk menginstall patch bgra install terlebih dahulu package xorg-util-macros, selanjutnya :

$ git clone https://github.com/uditkarode/libxft-bgra
$ cd libxft-bgra
$ sh autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man
$ sudo make install

Merubah file drw.c pada dwm dan dmenu

Setelah patch terinstall kita perlu mengubah file drw.c untuk merender karakter yang berwarna, hapus beberapa baris berikut :

/* 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;
}

Terakhir install ulang kembali dwm atau dmenu dengan menggunakan :

$ sudo make clean install

Merubah file x.c pada st

Untuk yang tidak mau menggunakan patch bgra, cukup merubah beberapa baris di dalam file x.c pada st agar st tidak crash ketika menjumpai karakter yang berwarna.

Ubah baris berikut:

XftDrawGlyphFontSpec(xw.draw, fg, specs, len);

Menjadi :

FcBool b = FcFalse;
FcPatternGetBool(specs->font->pattern, FC_COLOR, 0, &b);
if (!b) {
    XftDrawGlyphFontSpec(xw.draw, fg, specs, len);
}

Terakhir install ulang kembali st dengan menggunakan :

$ sudo make clean install

comments powered by Disqus

© Nestero. All Rights Reserved.