applied Neil Klopfstein's patch, slightly modified - dwm - dynamic window manager
 (HTM) git clone https://git.parazyd.org/dwm
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 344f35f9f55b615e5d7c46f863578f1cc974cc54
 (DIR) parent 87adcd263b1fc75f7eb3172dac55ca641fd7a96a
 (HTM) Author: anselm@garbe.us <unknown>
       Date:   Sat, 17 Nov 2012 19:10:39 +0100
       
       applied Neil Klopfstein's patch, slightly modified
       Diffstat:
         M dwm.c                               |      10 ++++++++--
       
       1 file changed, 8 insertions(+), 2 deletions(-)
       ---
 (DIR) diff --git a/dwm.c b/dwm.c
       @@ -282,7 +282,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
                [UnmapNotify] = unmapnotify
        };
        static Atom wmatom[WMLast], netatom[NetLast];
       -static Bool running = True;
       +static Bool running = True, usexkb;
        static Cursor cursor[CurLast];
        static Display *dpy;
        static DC dc;
       @@ -1069,7 +1069,10 @@ keypress(XEvent *e) {
                XKeyEvent *ev;
        
                ev = &e->xkey;
       -        keysym = XkbKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0, 0);
       +        if(usexkb) {
       +                keysym = XkbKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0, 0);
       +        else
       +                keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
                for(i = 0; i < LENGTH(keys); i++)
                        if(keysym == keys[i].keysym
                        && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
       @@ -1579,6 +1582,7 @@ setmfact(const Arg *arg) {
        void
        setup(void) {
                XSetWindowAttributes wa;
       +        int dummy = 0, xkbmajor = XkbMajorVersion, xkbminor = XkbMinorVersion;
        
                /* clean up any zombies immediately */
                sigchld(0);
       @@ -1631,6 +1635,8 @@ setup(void) {
                                |EnterWindowMask|LeaveWindowMask|StructureNotifyMask|PropertyChangeMask;
                XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
                XSelectInput(dpy, root, wa.event_mask);
       +        /* init xkb */
       +        usexkb = XkbQueryExtension(dpy, &dummy, &dummy, &dummy, &xkb_major, &xkb_minor);
                grabkeys();
        }