talso, don't set the font all the time - dmenu - Dmenu fork with xft fonts.
 (HTM) git clone git://r-36.net/dmenu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 724f72142f6dc880068a92e412f3f3366e643569
 (DIR) parent 5b8dce15d3e4d1e50fc4f1df10665260f74a0a02
 (HTM) Author: Anselm R. Garbe <arg@suckless.org>
       Date:   Fri,  2 Mar 2007 15:16:36 +0100
       
       also, don't set the font all the time
       Diffstat:
         config.mk                           |       2 +-
         draw.c                              |      15 ++++-----------
         main.c                              |       2 ++
       
       3 files changed, 7 insertions(+), 12 deletions(-)
       ---
 (DIR) diff --git a/config.mk b/config.mk
       t@@ -1,5 +1,5 @@
        # dmenu version
       -VERSION = 2.6
       +VERSION = 2.7
        
        # Customize below to fit your system
        
 (DIR) diff --git a/draw.c b/draw.c
       t@@ -12,7 +12,6 @@ drawtext(const char *text, unsigned long col[ColLast]) {
                int x, y, w, h;
                static char buf[256];
                unsigned int len, olen;
       -        XGCValues gcv;
                XRectangle r = { dc.x, dc.y, dc.w, dc.h };
        
                XSetForeground(dpy, dc.gc, col[ColBG]);
       t@@ -41,17 +40,11 @@ drawtext(const char *text, unsigned long col[ColLast]) {
                }
                if(w > dc.w)
                        return; /* too long */
       -        gcv.foreground = col[ColFG];
       -        if(dc.font.set) {
       -                XChangeGC(dpy, dc.gc, GCForeground, &gcv);
       -                XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc,
       -                                x, y, buf, len);
       -        }
       -        else {
       -                gcv.font = dc.font.xfont->fid;
       -                XChangeGC(dpy, dc.gc, GCForeground | GCFont, &gcv);
       +        XSetForeground(dpy, dc.gc, col[ColFG]);
       +        if(dc.font.set)
       +                XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
       +        else
                        XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
       -        }
        }
        
        unsigned int
 (DIR) diff --git a/main.c b/main.c
       t@@ -493,6 +493,8 @@ main(int argc, char *argv[]) {
                dc.drawable = XCreatePixmap(dpy, root, mw, mh, DefaultDepth(dpy, screen));
                dc.gc = XCreateGC(dpy, root, 0, 0);
                XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
       +        if(!dc.font.set)
       +                XSetFont(dpy, dc.gc, dc.font.xfont->fid);
                if(maxname)
                        cmdw = textw(maxname);
                if(cmdw > mw / 3)