t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit e9a07335060337222c94260797582aae2c74d455
   DIR parent 198502f41dc3c436b73215f5e2a6b58b050ecfce
   URI Author: Anselm R. Garbe <garbeam@gmail.com>
       Date:   Sat, 10 Nov 2007 19:16:11 +0100
       
       Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
       Diffstat:
         M config.def.h                        |     115 +++++++++++++++----------------
         M dwm.c                               |      44 +++++++++++++++++--------------
       
       2 files changed, 81 insertions(+), 78 deletions(-)
       ---
   DIR diff --git a/config.def.h b/config.def.h
       t@@ -12,7 +12,7 @@
        #define SELFGCOLOR                "#ffffff"
        
        /* tagging */
       -const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" };
       +const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" };
        Bool seltags[LENGTH(tags)] = {[0] = True};
        Rule rules[] = {
                /* class:instance:title regex        tags regex        isfloating */
       t@@ -34,61 +34,60 @@ Layout layouts[] = {
        
        /* key definitions */
        #define MODKEY                        Mod1Mask
       -#define KEYS \
       -Key keys[] = { \
       -        /* modifier                        key                function        argument */ \
       -        { MODKEY,                        XK_p,                spawn, \
       -                "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'" \
       -                " -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'` && exec $exe" }, \
       -        { MODKEY|ShiftMask,                XK_Return,        spawn, "exec uxterm" }, \
       -        { MODKEY,                        XK_space,        setlayout,        NULL }, \
       -        { MODKEY,                        XK_b,                togglebar,        NULL }, \
       -        { MODKEY,                        XK_j,                focusnext,        NULL }, \
       -        { MODKEY,                        XK_k,                focusprev,        NULL }, \
       -        { MODKEY,                        XK_h,                setmwfact,        "-0.05" }, \
       -        { MODKEY,                        XK_l,                setmwfact,        "+0.05" }, \
       -        { MODKEY,                        XK_m,                togglemax,        NULL }, \
       -        { MODKEY,                        XK_Return,        zoom,                NULL }, \
       -        { MODKEY,                        XK_Tab,                viewprevtag,        NULL }, \
       -        { MODKEY|ShiftMask,                XK_space,        togglefloating,        NULL }, \
       -        { MODKEY|ShiftMask,                XK_c,                killclient,        NULL }, \
       -        { MODKEY,                        XK_0,                view,                NULL }, \
       -        { MODKEY,                        XK_1,                view,                tags[0] }, \
       -        { MODKEY,                        XK_2,                view,                tags[1] }, \
       -        { MODKEY,                        XK_3,                view,                tags[2] }, \
       -        { MODKEY,                        XK_4,                view,                tags[3] }, \
       -        { MODKEY,                        XK_5,                view,                tags[4] }, \
       -        { MODKEY,                        XK_6,                view,                tags[5] }, \
       -        { MODKEY,                        XK_7,                view,                tags[6] }, \
       -        { MODKEY,                        XK_8,                view,                tags[7] }, \
       -        { MODKEY,                        XK_9,                view,                tags[8] }, \
       -        { MODKEY|ControlMask,                XK_1,                toggleview,        tags[0] }, \
       -        { MODKEY|ControlMask,                XK_2,                toggleview,        tags[1] }, \
       -        { MODKEY|ControlMask,                XK_3,                toggleview,        tags[2] }, \
       -        { MODKEY|ControlMask,                XK_4,                toggleview,        tags[3] }, \
       -        { MODKEY|ControlMask,                XK_5,                toggleview,        tags[4] }, \
       -        { MODKEY|ControlMask,                XK_6,                toggleview,        tags[5] }, \
       -        { MODKEY|ControlMask,                XK_7,                toggleview,        tags[6] }, \
       -        { MODKEY|ControlMask,                XK_8,                toggleview,        tags[7] }, \
       -        { MODKEY|ControlMask,                XK_9,                toggleview,        tags[8] }, \
       -        { MODKEY|ShiftMask,                XK_0,                tag,                NULL }, \
       -        { MODKEY|ShiftMask,                XK_1,                tag,                tags[0] }, \
       -        { MODKEY|ShiftMask,                XK_2,                tag,                tags[1] }, \
       -        { MODKEY|ShiftMask,                XK_3,                tag,                tags[2] }, \
       -        { MODKEY|ShiftMask,                XK_4,                tag,                tags[3] }, \
       -        { MODKEY|ShiftMask,                XK_5,                tag,                tags[4] }, \
       -        { MODKEY|ShiftMask,                XK_6,                tag,                tags[5] }, \
       -        { MODKEY|ShiftMask,                XK_7,                tag,                tags[6] }, \
       -        { MODKEY|ShiftMask,                XK_8,                tag,                tags[7] }, \
       -        { MODKEY|ShiftMask,                XK_9,                tag,                tags[8] }, \
       -        { MODKEY|ControlMask|ShiftMask,        XK_1,                toggletag,        tags[0] }, \
       -        { MODKEY|ControlMask|ShiftMask,        XK_2,                toggletag,        tags[1] }, \
       -        { MODKEY|ControlMask|ShiftMask,        XK_3,                toggletag,        tags[2] }, \
       -        { MODKEY|ControlMask|ShiftMask,        XK_4,                toggletag,        tags[3] }, \
       -        { MODKEY|ControlMask|ShiftMask,        XK_5,                toggletag,        tags[4] }, \
       -        { MODKEY|ControlMask|ShiftMask,        XK_6,                toggletag,        tags[5] }, \
       -        { MODKEY|ControlMask|ShiftMask,        XK_7,                toggletag,        tags[6] }, \
       -        { MODKEY|ControlMask|ShiftMask,        XK_8,                toggletag,        tags[7] }, \
       -        { MODKEY|ControlMask|ShiftMask,        XK_9,                toggletag,        tags[8] }, \
       -        { MODKEY|ShiftMask,                XK_q,                quit,                NULL }, \
       +Key keys[] = {
       +        /* modifier                        key                function        argument */
       +        { MODKEY,                        XK_p,                spawn,
       +                "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'"
       +                " -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'` && exec $exe" },
       +        { MODKEY|ShiftMask,                XK_Return,        spawn, "exec uxterm" },
       +        { MODKEY,                        XK_space,        setlayout,        NULL },
       +        { MODKEY,                        XK_b,                togglebar,        NULL },
       +        { MODKEY,                        XK_j,                focusnext,        NULL },
       +        { MODKEY,                        XK_k,                focusprev,        NULL },
       +        { MODKEY,                        XK_h,                setmwfact,        "-0.05" },
       +        { MODKEY,                        XK_l,                setmwfact,        "+0.05" },
       +        { MODKEY,                        XK_m,                togglemax,        NULL },
       +        { MODKEY,                        XK_Return,        zoom,                NULL },
       +        { MODKEY,                        XK_Tab,                viewprevtag,        NULL },
       +        { MODKEY|ShiftMask,                XK_space,        togglefloating,        NULL },
       +        { MODKEY|ShiftMask,                XK_c,                killclient,        NULL },
       +        { MODKEY,                        XK_0,                view,                NULL },
       +        { MODKEY,                        XK_1,                view,                tags[0] },
       +        { MODKEY,                        XK_2,                view,                tags[1] },
       +        { MODKEY,                        XK_3,                view,                tags[2] },
       +        { MODKEY,                        XK_4,                view,                tags[3] },
       +        { MODKEY,                        XK_5,                view,                tags[4] },
       +        { MODKEY,                        XK_6,                view,                tags[5] },
       +        { MODKEY,                        XK_7,                view,                tags[6] },
       +        { MODKEY,                        XK_8,                view,                tags[7] },
       +        { MODKEY,                        XK_9,                view,                tags[8] },
       +        { MODKEY|ControlMask,                XK_1,                toggleview,        tags[0] },
       +        { MODKEY|ControlMask,                XK_2,                toggleview,        tags[1] },
       +        { MODKEY|ControlMask,                XK_3,                toggleview,        tags[2] },
       +        { MODKEY|ControlMask,                XK_4,                toggleview,        tags[3] },
       +        { MODKEY|ControlMask,                XK_5,                toggleview,        tags[4] },
       +        { MODKEY|ControlMask,                XK_6,                toggleview,        tags[5] },
       +        { MODKEY|ControlMask,                XK_7,                toggleview,        tags[6] },
       +        { MODKEY|ControlMask,                XK_8,                toggleview,        tags[7] },
       +        { MODKEY|ControlMask,                XK_9,                toggleview,        tags[8] },
       +        { MODKEY|ShiftMask,                XK_0,                tag,                NULL },
       +        { MODKEY|ShiftMask,                XK_1,                tag,                tags[0] },
       +        { MODKEY|ShiftMask,                XK_2,                tag,                tags[1] },
       +        { MODKEY|ShiftMask,                XK_3,                tag,                tags[2] },
       +        { MODKEY|ShiftMask,                XK_4,                tag,                tags[3] },
       +        { MODKEY|ShiftMask,                XK_5,                tag,                tags[4] },
       +        { MODKEY|ShiftMask,                XK_6,                tag,                tags[5] },
       +        { MODKEY|ShiftMask,                XK_7,                tag,                tags[6] },
       +        { MODKEY|ShiftMask,                XK_8,                tag,                tags[7] },
       +        { MODKEY|ShiftMask,                XK_9,                tag,                tags[8] },
       +        { MODKEY|ControlMask|ShiftMask,        XK_1,                toggletag,        tags[0] },
       +        { MODKEY|ControlMask|ShiftMask,        XK_2,                toggletag,        tags[1] },
       +        { MODKEY|ControlMask|ShiftMask,        XK_3,                toggletag,        tags[2] },
       +        { MODKEY|ControlMask|ShiftMask,        XK_4,                toggletag,        tags[3] },
       +        { MODKEY|ControlMask|ShiftMask,        XK_5,                toggletag,        tags[4] },
       +        { MODKEY|ControlMask|ShiftMask,        XK_6,                toggletag,        tags[5] },
       +        { MODKEY|ControlMask|ShiftMask,        XK_7,                toggletag,        tags[6] },
       +        { MODKEY|ControlMask|ShiftMask,        XK_8,                toggletag,        tags[7] },
       +        { MODKEY|ControlMask|ShiftMask,        XK_9,                toggletag,        tags[8] },
       +        { MODKEY|ShiftMask,                XK_q,                quit,                NULL },
        };
   DIR diff --git a/dwm.c b/dwm.c
       t@@ -44,8 +44,9 @@
        /* macros */
        #define BUTTONMASK                (ButtonPressMask | ButtonReleaseMask)
        #define CLEANMASK(mask)                (mask & ~(numlockmask | LockMask))
       -#define MOUSEMASK                (BUTTONMASK | PointerMotionMask)
        #define LENGTH(x)                (sizeof x / sizeof x[0])
       +#define MAXTAGLEN                16
       +#define MOUSEMASK                (BUTTONMASK | PointerMotionMask)
        
        
        /* enums */
       t@@ -143,6 +144,7 @@ unsigned long getcolor(const char *colstr);
        long getstate(Window w);
        Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
        void grabbuttons(Client *c, Bool focused);
       +void grabkeys(void);
        unsigned int idxoftag(const char *tag);
        void initfont(const char *fontstr);
        Bool isoccupied(unsigned int t);
       t@@ -838,6 +840,25 @@ grabbuttons(Client *c, Bool focused) {
                                        GrabModeAsync, GrabModeSync, None, None);
        }
        
       +void
       +grabkeys(void)  {
       +        unsigned int i;
       +        KeyCode code;
       +
       +        XUngrabKey(dpy, AnyKey, AnyModifier, root);
       +        for(i = 0; i < LENGTH(keys); i++) {
       +                code = XKeysymToKeycode(dpy, keys[i].keysym);
       +                XGrabKey(dpy, code, keys[i].mod, root, True,
       +                                GrabModeAsync, GrabModeAsync);
       +                XGrabKey(dpy, code, keys[i].mod | LockMask, root, True,
       +                                GrabModeAsync, GrabModeAsync);
       +                XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True,
       +                                GrabModeAsync, GrabModeAsync);
       +                XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True,
       +                                GrabModeAsync, GrabModeAsync);
       +        }
       +}
       +
        unsigned int
        idxoftag(const char *tag) {
                unsigned int i;
       t@@ -925,27 +946,10 @@ isvisible(Client *c) {
        
        void
        keypress(XEvent *e) {
       -        KEYS
                unsigned int i;
       -        KeyCode code;
                KeySym keysym;
                XKeyEvent *ev;
        
       -        if(!e) { /* grabkeys */
       -                XUngrabKey(dpy, AnyKey, AnyModifier, root);
       -                for(i = 0; i < LENGTH(keys); i++) {
       -                        code = XKeysymToKeycode(dpy, keys[i].keysym);
       -                        XGrabKey(dpy, code, keys[i].mod, root, True,
       -                                        GrabModeAsync, GrabModeAsync);
       -                        XGrabKey(dpy, code, keys[i].mod | LockMask, root, True,
       -                                        GrabModeAsync, GrabModeAsync);
       -                        XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True,
       -                                        GrabModeAsync, GrabModeAsync);
       -                        XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True,
       -                                        GrabModeAsync, GrabModeAsync);
       -                }
       -                return;
       -        }
                ev = &e->xkey;
                keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
                for(i = 0; i < LENGTH(keys); i++)
       t@@ -1048,7 +1052,7 @@ mappingnotify(XEvent *e) {
        
                XRefreshKeyboardMapping(ev);
                if(ev->request == MappingKeyboard)
       -                keypress(NULL);
       +                grabkeys();
        }
        
        void
       t@@ -1460,7 +1464,7 @@ setup(void) {
                XSelectInput(dpy, root, wa.event_mask);
        
                /* grab keys */
       -        keypress(NULL);
       +        grabkeys();
        
                /* init tags */
                compileregs();