This diff works for me with some fonts (fixed, snap, even verdana),
but doesn't work with terminus (black squares instead of chars).
Index: app/cwm/calmwm.c
===================================================================
RCS file: /cvs/xenocara/app/cwm/calmwm.c,v
retrieving revision 1.54
diff -u -p -u -r1.54 calmwm.c
--- app/cwm/calmwm.c 11 May 2011 13:53:51 -0000 1.54
+++ app/cwm/calmwm.c 27 May 2011 12:35:51 -0000
@@ -30,6 +30,7 @@
#include <string.h>
#include <stdio.h>
#include <unistd.h>
+#include <locale.h>
#include "calmwm.h"
@@ -61,6 +62,8 @@ main(int argc, char **argv)
const char *conf_file = NULL;
char *display_name = NULL;
int ch;
+
+ setlocale(LC_CTYPE, "");
while ((ch = getopt(argc, argv, "c:d:")) != -1) {
switch (ch) {
Index: app/cwm/font.c
===================================================================
RCS file: /cvs/xenocara/app/cwm/font.c,v
retrieving revision 1.14
diff -u -p -u -r1.14 font.c
--- app/cwm/font.c 11 May 2011 13:53:51 -0000 1.14
+++ app/cwm/font.c 27 May 2011 12:35:51 -0000
@@ -66,7 +66,7 @@ font_width(struct screen_ctx *sc, const
{
XGlyphInfo extents;
- XftTextExtents8(X_Dpy, sc->font, (const XftChar8*)text,
+ XftTextExtentsUtf8(X_Dpy, sc->font, (unsigned char*)text,
len, &extents);
return (extents.xOff);
@@ -77,9 +77,8 @@ font_draw(struct screen_ctx *sc, const c
Drawable d, int x, int y)
{
XftDrawChange(sc->xftdraw, d);
- /* Really needs to be UTF8'd. */
- XftDrawString8(sc->xftdraw, &sc->xftcolor, sc->font, x, y,
- (const FcChar8*)text, len);
+ XftDrawStringUtf8(sc->xftdraw, &sc->xftcolor, sc->font, x, y,
+ (const unsigned char*)text, len);
}
XftFont *
--
Alexander Polakov | plhk.ru