dwm

Extremely fast, small, and dynamic window manager for X
git clone git://git.janpasierb.com/dwm.git
Log | Files | Refs | README | LICENSE

commit a73a88280681acdab047bd11a9ba77d97d6a0b72
parent 57416beefec4db451a75a1d25434b69cf50badad
Author: arg@10ksloc.org <unknown>
Date:   Tue,  1 Aug 2006 13:59:13 +0200

centralized/externalized configuration to config.h

Diffstat:
MREADME | 8++++++--
Aconfig.arg.h | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aconfig.h | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mconfig.mk | 7+++++--
Mdwm.1 | 6++----
Mdwm.h | 21+--------------------
Mevent.c | 68++++++++++----------------------------------------------------------
Mmain.c | 4+---
Mtag.c | 22++++------------------
9 files changed, 172 insertions(+), 107 deletions(-)

diff --git a/README b/README @@ -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 ----------- @@ -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. diff --git a/config.arg.h b/config.arg.h @@ -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 diff --git a/config.h b/config.h @@ -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 diff --git a/config.mk b/config.mk @@ -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 @@ -22,3 +22,6 @@ CC = cc # dwm version VERSION = 0.6 + +# default config.h +CONFIG = config.h diff --git a/dwm.1 b/dwm.1 @@ -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. diff --git a/dwm.h b/dwm.h @@ -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) diff --git a/event.c b/event.c @@ -8,7 +8,7 @@ #include <X11/keysym.h> #include <X11/Xatom.h> -/* CUSTOMIZE */ +/* static */ typedef struct { unsigned long mod; @@ -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) @@ -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); } } diff --git a/main.c b/main.c @@ -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; diff --git a/tag.c b/tag.c @@ -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 */