centralized/externalized configuration to config.h

This commit is contained in:
arg@10ksloc.org 2006-08-01 13:59:13 +02:00
parent 57416beefe
commit a73a882806
9 changed files with 171 additions and 106 deletions

8
README
View file

@ -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.

76
config.arg.h Normal file
View file

@ -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

67
config.h Normal file
View file

@ -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

View file

@ -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

6
dwm.1
View file

@ -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.

21
dwm.h
View file

@ -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)

68
event.c
View file

@ -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 };
CMDS
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 NumLockMask Mod2Mask
unsigned int valid_mask = 255 & ~( NumLockMask | LockMask);
/* END CUSTOMIZE */
/* 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);
}
}

4
main.c
View file

@ -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;

20
tag.c
View file

@ -18,24 +18,10 @@ typedef struct {
Bool isfloat;
} Rule;
/* CUSTOMIZE */
static Rule rule[] = {
/* class:instance tags isfloat */
{ "Firefox.*", { [Tnet] = "net" }, False },
{ "Gimp.*", { 0 }, True},
};
TAGS
RULES
char *tags[TLast] = {
[Tfnord] = "fnord",
[Tdev] = "dev",
[Tnet] = "net",
[Twork] = "work",
[Tmisc] = "misc",
};
void (*arrange)(Arg *) = dotile;
/* END CUSTOMIZE */
void (*arrange)(Arg *) = ARRANGE;
/* extern */