t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit a73a88280681acdab047bd11a9ba77d97d6a0b72
   DIR parent 57416beefec4db451a75a1d25434b69cf50badad
   URI Author: arg@10ksloc.org <unknown>
       Date:   Tue,  1 Aug 2006 13:59:13 +0200
       
       centralized/externalized configuration to config.h
       
       Diffstat:
         M README                              |       8 ++++++--
         A config.arg.h                        |      76 +++++++++++++++++++++++++++++++
         A config.h                            |      67 +++++++++++++++++++++++++++++++
         M config.mk                           |       7 +++++--
         M dwm.1                               |       6 ++----
         M dwm.h                               |      21 +--------------------
         M event.c                             |      68 +++++--------------------------
         M main.c                              |       4 +---
         M tag.c                               |      22 ++++------------------
       
       9 files changed, 172 insertions(+), 107 deletions(-)
       ---
   DIR diff --git a/README b/README
       t@@ -18,6 +18,11 @@ necessary as root):
        
            make clean install
        
       +If you want to use a customized config.h, you can use the following
       +command for installing dwm:
       +
       +    make CONFIG=<your-config>.h clean install
       +
        
        Running dwm
        -----------
       t@@ -47,5 +52,4 @@ like this in your .xinitrc:
        
        Configuration
        -------------
       -The configuration of dwm is done by customizing its source code
       -(grep for the CUSTOMIZE keyword).
       +The configuration of dwm is done by editing config.h.
   DIR diff --git a/config.arg.h b/config.arg.h
       t@@ -0,0 +1,76 @@
       +/*
       + * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
       + * See LICENSE file for license details.
       + */
       +
       +#define FONT                        "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
       +#define BGCOLOR                        "#0a2c2d"
       +#define FGCOLOR                        "#ddeeee"
       +#define BORDERCOLOR                "#176164"
       +#define MODKEY                        Mod1Mask
       +#define NUMLOCKMASK                Mod2Mask
       +#define MASTERW                        52 /* percent */
       +#define WM_PROTOCOL_DELWIN        1
       +
       +enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
       +#define TAGS \
       +char *tags[TLast] = { \
       +        [Tfnord] = "fnord", \
       +        [Tdev] = "dev", \
       +        [Tnet] = "net", \
       +        [Twork] = "work", \
       +        [Tmisc] = "misc", \
       +};
       +#define DEFTAG Tdev
       +
       +
       +#define CMDS \
       +        const char *browse[] = { "firefox", NULL }; \
       +        const char *gimp[] = { "gimp", NULL }; \
       +        const char *term[] = { \
       +                "urxvt", "-tr", "+sb", "-bg", "black", "-fg", "white", "-cr", "white", \
       +                "-fn", "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", NULL \
       +        }; \
       +        const char *xlock[] = { "xlock", NULL };
       +
       +#define KEYS \
       +static Key key[] = { \
       +        /* modifier                key                function        arguments */ \
       +        { MODKEY,                XK_0,                view,                { .i = Tfnord } }, \
       +        { MODKEY,                XK_1,                view,                { .i = Tdev } }, \
       +        { MODKEY,                XK_2,                view,                { .i = Tnet } }, \
       +        { MODKEY,                XK_3,                view,                { .i = Twork } }, \
       +        { MODKEY,                XK_4,                view,                { .i = Tmisc} }, \
       +        { MODKEY,                XK_h,                viewprev,        { 0 } }, \
       +        { MODKEY,                XK_j,                focusnext,        { 0 } }, \
       +        { MODKEY,                XK_k,                focusprev,        { 0 } }, \
       +        { MODKEY,                XK_l,                viewnext,        { 0 } }, \
       +        { MODKEY,                XK_m,                togglemax,        { 0 } }, \
       +        { MODKEY,                XK_space,        togglemode,        { 0 } }, \
       +        { MODKEY,                XK_Return,        zoom,                { 0 } }, \
       +        { MODKEY|ControlMask,        XK_0,                appendtag,        { .i = Tfnord } }, \
       +        { MODKEY|ControlMask,        XK_1,                appendtag,        { .i = Tdev } }, \
       +        { MODKEY|ControlMask,        XK_2,                appendtag,        { .i = Tnet } }, \
       +        { MODKEY|ControlMask,        XK_3,                appendtag,        { .i = Twork } }, \
       +        { MODKEY|ControlMask,        XK_4,                appendtag,        { .i = Tmisc } }, \
       +        { MODKEY|ShiftMask,        XK_0,                replacetag,        { .i = Tfnord } }, \
       +        { MODKEY|ShiftMask,        XK_1,                replacetag,        { .i = Tdev } }, \
       +        { MODKEY|ShiftMask,        XK_2,                replacetag,        { .i = Tnet } }, \
       +        { MODKEY|ShiftMask,        XK_3,                replacetag,        { .i = Twork } }, \
       +        { MODKEY|ShiftMask,        XK_4,                replacetag,        { .i = Tmisc } }, \
       +        { MODKEY|ShiftMask,        XK_c,                killclient,        { 0 } }, \
       +        { MODKEY|ShiftMask,        XK_q,                quit,                { 0 } }, \
       +        { MODKEY|ShiftMask,        XK_Return,        spawn,                { .argv = term } }, \
       +        { MODKEY|ShiftMask,        XK_g,                spawn,                { .argv = gimp } }, \
       +        { MODKEY|ShiftMask,        XK_l,                spawn,                { .argv = xlock } }, \
       +        { MODKEY|ShiftMask,        XK_w,                spawn,                { .argv = browse } }, \
       +};
       +
       +#define RULES \
       +static Rule rule[] = { \
       +        /* class:instance        tags                                isfloat */ \
       +        { "Firefox.*",                { [Tnet] = "net" },                False }, \
       +        { "Gimp.*",                { 0 },                                True}, \
       +};
       +
       +#define ARRANGE dotile
   DIR diff --git a/config.h b/config.h
       t@@ -0,0 +1,67 @@
       +/*
       + * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
       + * See LICENSE file for license details.
       + */
       +
       +#define FONT                        "fixed"
       +#define BGCOLOR                        "#666699"
       +#define FGCOLOR                        "#eeeeee"
       +#define BORDERCOLOR                "#9999CC"
       +#define MODKEY                        Mod1Mask
       +#define NUMLOCKMASK                Mod2Mask
       +#define MASTERW                        52 /* percent */
       +#define WM_PROTOCOL_DELWIN        1
       +
       +enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
       +#define TAGS \
       +char *tags[TLast] = { \
       +        [Tfnord] = "fnord", \
       +        [Tdev] = "dev", \
       +        [Tnet] = "net", \
       +        [Twork] = "work", \
       +        [Tmisc] = "misc", \
       +};
       +#define DEFTAG Tdev
       +
       +
       +#define CMDS \
       +        const char *term[] = { "xterm", NULL };
       +
       +#define KEYS \
       +static Key key[] = { \
       +        /* modifier                key                function        arguments */ \
       +        { MODKEY,                XK_0,                view,                { .i = Tfnord } }, \
       +        { MODKEY,                XK_1,                view,                { .i = Tdev } }, \
       +        { MODKEY,                XK_2,                view,                { .i = Tnet } }, \
       +        { MODKEY,                XK_3,                view,                { .i = Twork } }, \
       +        { MODKEY,                XK_4,                view,                { .i = Tmisc} }, \
       +        { MODKEY,                XK_h,                viewprev,        { 0 } }, \
       +        { MODKEY,                XK_j,                focusnext,        { 0 } }, \
       +        { MODKEY,                XK_k,                focusprev,        { 0 } }, \
       +        { MODKEY,                XK_l,                viewnext,        { 0 } }, \
       +        { MODKEY,                XK_m,                togglemax,        { 0 } }, \
       +        { MODKEY,                XK_space,        togglemode,        { 0 } }, \
       +        { MODKEY,                XK_Return,        zoom,                { 0 } }, \
       +        { MODKEY|ControlMask,        XK_0,                appendtag,        { .i = Tfnord } }, \
       +        { MODKEY|ControlMask,        XK_1,                appendtag,        { .i = Tdev } }, \
       +        { MODKEY|ControlMask,        XK_2,                appendtag,        { .i = Tnet } }, \
       +        { MODKEY|ControlMask,        XK_3,                appendtag,        { .i = Twork } }, \
       +        { MODKEY|ControlMask,        XK_4,                appendtag,        { .i = Tmisc } }, \
       +        { MODKEY|ShiftMask,        XK_0,                replacetag,        { .i = Tfnord } }, \
       +        { MODKEY|ShiftMask,        XK_1,                replacetag,        { .i = Tdev } }, \
       +        { MODKEY|ShiftMask,        XK_2,                replacetag,        { .i = Tnet } }, \
       +        { MODKEY|ShiftMask,        XK_3,                replacetag,        { .i = Twork } }, \
       +        { MODKEY|ShiftMask,        XK_4,                replacetag,        { .i = Tmisc } }, \
       +        { MODKEY|ShiftMask,        XK_c,                killclient,        { 0 } }, \
       +        { MODKEY|ShiftMask,        XK_q,                quit,                { 0 } }, \
       +        { MODKEY|ShiftMask,        XK_Return,        spawn,                { .argv = term } }, \
       +};
       +
       +#define RULES \
       +static Rule rule[] = { \
       +        /* class:instance        tags                                isfloat */ \
       +        { "Firefox.*",                { [Tnet] = "net" },                False }, \
       +        { "Gimp.*",                { 0 },                                True}, \
       +};
       +
       +#define ARRANGE dotile
   DIR diff --git a/config.mk b/config.mk
       t@@ -12,9 +12,9 @@ INCS = -I/usr/lib -I${X11INC}
        LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
        
        # flags
       -CFLAGS = -O3 ${INCS} -DVERSION=\"${VERSION}\"
       +CFLAGS = -O3 ${INCS} -DVERSION=\"${VERSION}\" -DCONFIG=\"${CONFIG}\"
        LDFLAGS = ${LIBS}
       -#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
       +#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" -DCONFIG=\"${CONFIGH}\"
        #LDFLAGS = -g ${LIBS}
        
        # compiler
       t@@ -22,3 +22,6 @@ CC = cc
        
        # dwm version
        VERSION = 0.6
       +
       +# default config.h
       +CONFIG = config.h
   DIR diff --git a/dwm.1 b/dwm.1
       t@@ -98,7 +98,5 @@ Resizes current
        while dragging
        .SH CUSTOMIZATION
        .B dwm
       -is customized through editing its source code.  This keeps it fast, secure and
       -simple. The source code contains the
       -.I CUSTOMIZE
       -keyword to highlight relevant portions for customization.
       +is customized through editing config.h of the source code.  This keeps it fast,
       +secure and simple.
   DIR diff --git a/dwm.h b/dwm.h
       t@@ -4,26 +4,7 @@
         */
        
        #include <X11/Xlib.h>
       -
       -/* CUSTOMIZE */
       -
       -#define FONT                        "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
       -#define BGCOLOR                        "#0a2c2d"
       -#define FGCOLOR                        "#ddeeee"
       -#define BORDERCOLOR                "#176164"
       -#define MODKEY                        Mod1Mask /* Mod4Mask */
       -/*
       -#define BGCOLOR                        "#666699"
       -#define FGCOLOR                        "#eeeeee"
       -#define BORDERCOLOR                "#9999CC"
       -*/
       -#define MASTERW                        52 /* percent */
       -#define WM_PROTOCOL_DELWIN        1
       -
       -/* tags */
       -enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
       -
       -/* END CUSTOMIZE */
       +#include CONFIG
        
        /* mask shorthands, used in event.c and client.c */
        #define ButtonMask        (ButtonPressMask | ButtonReleaseMask)
   DIR diff --git a/event.c b/event.c
       t@@ -8,7 +8,7 @@
        #include <X11/keysym.h>
        #include <X11/Xatom.h>
        
       -/* CUSTOMIZE */
       +/* static */
        
        typedef struct {
                unsigned long mod;
       t@@ -17,52 +17,10 @@ typedef struct {
                Arg arg;
        } Key;
        
       -const char *browse[] = { "firefox", NULL };
       -const char *gimp[] = { "gimp", NULL };
       -const char *term[] = { /*"xterm", NULL };*/
       -        "urxvt", "-tr", "+sb", "-bg", "black", "-fg", "white", "-cr", "white",
       -        "-fn", "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", NULL
       -};
       -const char *xlock[] = { "xlock", NULL };
       -
       -static Key key[] = {
       -        /* modifier                key                function        arguments */
       -        { MODKEY,                XK_0,                view,                { .i = Tfnord } }, 
       -        { MODKEY,                XK_1,                view,                { .i = Tdev } }, 
       -        { MODKEY,                XK_2,                view,                { .i = Tnet } }, 
       -        { MODKEY,                XK_3,                view,                { .i = Twork } }, 
       -        { MODKEY,                XK_4,                view,                { .i = Tmisc} }, 
       -        { MODKEY,                XK_h,                viewprev,        { 0 } },
       -        { MODKEY,                XK_j,                focusnext,        { 0 } }, 
       -        { MODKEY,                XK_k,                focusprev,        { 0 } },
       -        { MODKEY,                XK_l,                viewnext,        { 0 } },
       -        { MODKEY,                XK_m,                togglemax,        { 0 } }, 
       -        { MODKEY,                XK_space,        togglemode,        { 0 } }, 
       -        { MODKEY,                XK_Return,        zoom,                { 0 } },
       -        { MODKEY|ControlMask,        XK_0,                appendtag,        { .i = Tfnord } }, 
       -        { MODKEY|ControlMask,        XK_1,                appendtag,        { .i = Tdev } }, 
       -        { MODKEY|ControlMask,        XK_2,                appendtag,        { .i = Tnet } }, 
       -        { MODKEY|ControlMask,        XK_3,                appendtag,        { .i = Twork } }, 
       -        { MODKEY|ControlMask,        XK_4,                appendtag,        { .i = Tmisc } }, 
       -        { MODKEY|ShiftMask,        XK_0,                replacetag,        { .i = Tfnord } }, 
       -        { MODKEY|ShiftMask,        XK_1,                replacetag,        { .i = Tdev } }, 
       -        { MODKEY|ShiftMask,        XK_2,                replacetag,        { .i = Tnet } }, 
       -        { MODKEY|ShiftMask,        XK_3,                replacetag,        { .i = Twork } }, 
       -        { MODKEY|ShiftMask,        XK_4,                replacetag,        { .i = Tmisc } }, 
       -        { MODKEY|ShiftMask,        XK_c,                killclient,        { 0 } }, 
       -        { MODKEY|ShiftMask,        XK_q,                quit,                { 0 } },
       -        { MODKEY|ShiftMask,        XK_Return,        spawn,                { .argv = term } },
       -        { MODKEY|ShiftMask,        XK_g,                spawn,                { .argv = gimp } },
       -        { MODKEY|ShiftMask,        XK_l,                spawn,                { .argv = xlock } },
       -        { MODKEY|ShiftMask,        XK_w,                spawn,                { .argv = browse } },
       -};
       -
       -#define NumLockMask Mod2Mask
       -unsigned int valid_mask =  255 &  ~( NumLockMask | LockMask);
       -
       -/* END CUSTOMIZE */
       +CMDS
       +KEYS
        
       -/* static */
       +static unsigned int valid_mask =  255 &  ~(NUMLOCKMASK | LockMask);
        
        static void
        movemouse(Client *c)
       t@@ -381,19 +339,13 @@ grabkeys()
                for(i = 0; i < len; i++) {
                        code = XKeysymToKeycode(dpy, key[i].keysym);
                        XUngrabKey(dpy, code, key[i].mod, root);
       -                if (NumLockMask)
       -                {
       -                        XUngrabKey(dpy, code, key[i].mod | NumLockMask, root);
       -                        XUngrabKey(dpy, code, key[i].mod | NumLockMask | LockMask, root);
       -                }
       +                XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root);
       +                XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root);
                        XGrabKey(dpy, code, key[i].mod, root, True,
                                        GrabModeAsync, GrabModeAsync);
       -                if (NumLockMask)
       -                {
       -                        XGrabKey(dpy, code, key[i].mod | NumLockMask, root, True,
       -                                        GrabModeAsync, GrabModeAsync);
       -                        XGrabKey(dpy, code, key[i].mod | NumLockMask | LockMask, root, True,
       -                                        GrabModeAsync, GrabModeAsync);
       -                }
       +                XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True,
       +                                GrabModeAsync, GrabModeAsync);
       +                XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True,
       +                                GrabModeAsync, GrabModeAsync);
                }
        }
   DIR diff --git a/main.c b/main.c
       t@@ -85,9 +85,7 @@ xerrorstart(Display *dsply, XErrorEvent *ee)
        /* extern */
        
        char stext[1024];
       -/* CUSTOMIZE */
       -int tsel = Tdev; /* default tag */
       -/* END CUSTOMIZE */
       +int tsel = DEFTAG;
        int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
        Atom wmatom[WMLast], netatom[NetLast];
        Bool running = True;
   DIR diff --git a/tag.c b/tag.c
       t@@ -18,24 +18,10 @@ typedef struct {
                Bool isfloat;
        } Rule;
        
       -/* CUSTOMIZE */ 
       -static Rule rule[] = {
       -        /* class:instance        tags                                isfloat */
       -        { "Firefox.*",                { [Tnet] = "net" },                False },
       -        { "Gimp.*",                { 0 },                                True},
       -};
       -
       -char *tags[TLast] = {
       -        [Tfnord] = "fnord",
       -        [Tdev] = "dev",
       -        [Tnet] = "net",
       -        [Twork] = "work",
       -        [Tmisc] = "misc",
       -};
       -
       -void (*arrange)(Arg *) = dotile;
       -
       -/* END CUSTOMIZE */
       +TAGS
       +RULES
       +
       +void (*arrange)(Arg *) = ARRANGE;
        
        /* extern */