centralized/externalized configuration to config.h a73a8828
arg@10ksloc.org · 2006-08-01 13:59 9 file(s) · +171 −106
README +6 −2
18 18
19 19
    make clean install
20 20
21 +
If you want to use a customized config.h, you can use the following
22 +
command for installing dwm:
23 +
24 +
    make CONFIG=<your-config>.h clean install
25 +
21 26
22 27
Running dwm
23 28
-----------
47 52
48 53
Configuration
49 54
-------------
50 -
The configuration of dwm is done by customizing its source code
51 -
(grep for the CUSTOMIZE keyword).
55 +
The configuration of dwm is done by editing config.h.
config.arg.h (added) +76 −0
1 +
/*
2 +
 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
3 +
 * See LICENSE file for license details.
4 +
 */
5 +
6 +
#define FONT			"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
7 +
#define BGCOLOR			"#0a2c2d"
8 +
#define FGCOLOR			"#ddeeee"
9 +
#define BORDERCOLOR		"#176164"
10 +
#define MODKEY			Mod1Mask
11 +
#define NUMLOCKMASK		Mod2Mask
12 +
#define MASTERW			52 /* percent */
13 +
#define WM_PROTOCOL_DELWIN	1
14 +
15 +
enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
16 +
#define TAGS \
17 +
char *tags[TLast] = { \
18 +
	[Tfnord] = "fnord", \
19 +
	[Tdev] = "dev", \
20 +
	[Tnet] = "net", \
21 +
	[Twork] = "work", \
22 +
	[Tmisc] = "misc", \
23 +
};
24 +
#define DEFTAG Tdev
25 +
26 +
27 +
#define CMDS \
28 +
	const char *browse[] = { "firefox", NULL }; \
29 +
	const char *gimp[] = { "gimp", NULL }; \
30 +
	const char *term[] = { \
31 +
		"urxvt", "-tr", "+sb", "-bg", "black", "-fg", "white", "-cr", "white", \
32 +
		"-fn", "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", NULL \
33 +
	}; \
34 +
	const char *xlock[] = { "xlock", NULL };
35 +
36 +
#define KEYS \
37 +
static Key key[] = { \
38 +
	/* modifier		key		function	arguments */ \
39 +
	{ MODKEY,		XK_0,		view,		{ .i = Tfnord } }, \
40 +
	{ MODKEY,		XK_1,		view,		{ .i = Tdev } }, \
41 +
	{ MODKEY,		XK_2,		view,		{ .i = Tnet } }, \
42 +
	{ MODKEY,		XK_3,		view,		{ .i = Twork } }, \
43 +
	{ MODKEY,		XK_4,		view,		{ .i = Tmisc} }, \
44 +
	{ MODKEY,		XK_h,		viewprev,	{ 0 } }, \
45 +
	{ MODKEY,		XK_j,		focusnext,	{ 0 } }, \
46 +
	{ MODKEY,		XK_k,		focusprev,	{ 0 } }, \
47 +
	{ MODKEY,		XK_l,		viewnext,	{ 0 } }, \
48 +
	{ MODKEY,		XK_m,		togglemax,	{ 0 } }, \
49 +
	{ MODKEY,		XK_space,	togglemode,	{ 0 } }, \
50 +
	{ MODKEY,		XK_Return,	zoom,		{ 0 } }, \
51 +
	{ MODKEY|ControlMask,	XK_0,		appendtag,	{ .i = Tfnord } }, \
52 +
	{ MODKEY|ControlMask,	XK_1,		appendtag,	{ .i = Tdev } }, \
53 +
	{ MODKEY|ControlMask,	XK_2,		appendtag,	{ .i = Tnet } }, \
54 +
	{ MODKEY|ControlMask,	XK_3,		appendtag,	{ .i = Twork } }, \
55 +
	{ MODKEY|ControlMask,	XK_4,		appendtag,	{ .i = Tmisc } }, \
56 +
	{ MODKEY|ShiftMask,	XK_0,		replacetag,	{ .i = Tfnord } }, \
57 +
	{ MODKEY|ShiftMask,	XK_1,		replacetag,	{ .i = Tdev } }, \
58 +
	{ MODKEY|ShiftMask,	XK_2,		replacetag,	{ .i = Tnet } }, \
59 +
	{ MODKEY|ShiftMask,	XK_3,		replacetag,	{ .i = Twork } }, \
60 +
	{ MODKEY|ShiftMask,	XK_4,		replacetag,	{ .i = Tmisc } }, \
61 +
	{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, \
62 +
	{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } }, \
63 +
	{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .argv = term } }, \
64 +
	{ MODKEY|ShiftMask,	XK_g,		spawn,		{ .argv = gimp } }, \
65 +
	{ MODKEY|ShiftMask,	XK_l,		spawn,		{ .argv = xlock } }, \
66 +
	{ MODKEY|ShiftMask,	XK_w,		spawn,		{ .argv = browse } }, \
67 +
};
68 +
69 +
#define RULES \
70 +
static Rule rule[] = { \
71 +
	/* class:instance	tags				isfloat */ \
72 +
	{ "Firefox.*",		{ [Tnet] = "net" },		False }, \
73 +
	{ "Gimp.*",		{ 0 },				True}, \
74 +
};
75 +
76 +
#define ARRANGE dotile
config.h (added) +67 −0
1 +
/*
2 +
 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
3 +
 * See LICENSE file for license details.
4 +
 */
5 +
6 +
#define FONT			"fixed"
7 +
#define BGCOLOR			"#666699"
8 +
#define FGCOLOR			"#eeeeee"
9 +
#define BORDERCOLOR		"#9999CC"
10 +
#define MODKEY			Mod1Mask
11 +
#define NUMLOCKMASK		Mod2Mask
12 +
#define MASTERW			52 /* percent */
13 +
#define WM_PROTOCOL_DELWIN	1
14 +
15 +
enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
16 +
#define TAGS \
17 +
char *tags[TLast] = { \
18 +
	[Tfnord] = "fnord", \
19 +
	[Tdev] = "dev", \
20 +
	[Tnet] = "net", \
21 +
	[Twork] = "work", \
22 +
	[Tmisc] = "misc", \
23 +
};
24 +
#define DEFTAG Tdev
25 +
26 +
27 +
#define CMDS \
28 +
	const char *term[] = { "xterm", NULL };
29 +
30 +
#define KEYS \
31 +
static Key key[] = { \
32 +
	/* modifier		key		function	arguments */ \
33 +
	{ MODKEY,		XK_0,		view,		{ .i = Tfnord } }, \
34 +
	{ MODKEY,		XK_1,		view,		{ .i = Tdev } }, \
35 +
	{ MODKEY,		XK_2,		view,		{ .i = Tnet } }, \
36 +
	{ MODKEY,		XK_3,		view,		{ .i = Twork } }, \
37 +
	{ MODKEY,		XK_4,		view,		{ .i = Tmisc} }, \
38 +
	{ MODKEY,		XK_h,		viewprev,	{ 0 } }, \
39 +
	{ MODKEY,		XK_j,		focusnext,	{ 0 } }, \
40 +
	{ MODKEY,		XK_k,		focusprev,	{ 0 } }, \
41 +
	{ MODKEY,		XK_l,		viewnext,	{ 0 } }, \
42 +
	{ MODKEY,		XK_m,		togglemax,	{ 0 } }, \
43 +
	{ MODKEY,		XK_space,	togglemode,	{ 0 } }, \
44 +
	{ MODKEY,		XK_Return,	zoom,		{ 0 } }, \
45 +
	{ MODKEY|ControlMask,	XK_0,		appendtag,	{ .i = Tfnord } }, \
46 +
	{ MODKEY|ControlMask,	XK_1,		appendtag,	{ .i = Tdev } }, \
47 +
	{ MODKEY|ControlMask,	XK_2,		appendtag,	{ .i = Tnet } }, \
48 +
	{ MODKEY|ControlMask,	XK_3,		appendtag,	{ .i = Twork } }, \
49 +
	{ MODKEY|ControlMask,	XK_4,		appendtag,	{ .i = Tmisc } }, \
50 +
	{ MODKEY|ShiftMask,	XK_0,		replacetag,	{ .i = Tfnord } }, \
51 +
	{ MODKEY|ShiftMask,	XK_1,		replacetag,	{ .i = Tdev } }, \
52 +
	{ MODKEY|ShiftMask,	XK_2,		replacetag,	{ .i = Tnet } }, \
53 +
	{ MODKEY|ShiftMask,	XK_3,		replacetag,	{ .i = Twork } }, \
54 +
	{ MODKEY|ShiftMask,	XK_4,		replacetag,	{ .i = Tmisc } }, \
55 +
	{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, \
56 +
	{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } }, \
57 +
	{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .argv = term } }, \
58 +
};
59 +
60 +
#define RULES \
61 +
static Rule rule[] = { \
62 +
	/* class:instance	tags				isfloat */ \
63 +
	{ "Firefox.*",		{ [Tnet] = "net" },		False }, \
64 +
	{ "Gimp.*",		{ 0 },				True}, \
65 +
};
66 +
67 +
#define ARRANGE dotile
config.mk +5 −2
12 12
LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
13 13
14 14
# flags
15 -
CFLAGS = -O3 ${INCS} -DVERSION=\"${VERSION}\"
15 +
CFLAGS = -O3 ${INCS} -DVERSION=\"${VERSION}\" -DCONFIG=\"${CONFIG}\"
16 16
LDFLAGS = ${LIBS}
17 -
#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
17 +
#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" -DCONFIG=\"${CONFIGH}\"
18 18
#LDFLAGS = -g ${LIBS}
19 19
20 20
# compiler
22 22
23 23
# dwm version
24 24
VERSION = 0.6
25 +
26 +
# default config.h
27 +
CONFIG = config.h
dwm.1 +2 −4
98 98
while dragging
99 99
.SH CUSTOMIZATION
100 100
.B dwm
101 -
is customized through editing its source code.  This keeps it fast, secure and
102 -
simple. The source code contains the
103 -
.I CUSTOMIZE
104 -
keyword to highlight relevant portions for customization.
101 +
is customized through editing config.h of the source code.  This keeps it fast,
102 +
secure and simple.
dwm.h +1 −20
4 4
 */
5 5
6 6
#include <X11/Xlib.h>
7 -
8 -
/* CUSTOMIZE */
9 -
10 -
#define FONT			"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
11 -
#define BGCOLOR			"#0a2c2d"
12 -
#define FGCOLOR			"#ddeeee"
13 -
#define BORDERCOLOR		"#176164"
14 -
#define MODKEY			Mod1Mask /* Mod4Mask */
15 -
/*
16 -
#define BGCOLOR			"#666699"
17 -
#define FGCOLOR			"#eeeeee"
18 -
#define BORDERCOLOR		"#9999CC"
19 -
*/
20 -
#define MASTERW			52 /* percent */
21 -
#define WM_PROTOCOL_DELWIN	1
22 -
23 -
/* tags */
24 -
enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
25 -
26 -
/* END CUSTOMIZE */
7 +
#include CONFIG
27 8
28 9
/* mask shorthands, used in event.c and client.c */
29 10
#define ButtonMask	(ButtonPressMask | ButtonReleaseMask)
event.c +10 −58
8 8
#include <X11/keysym.h>
9 9
#include <X11/Xatom.h>
10 10
11 -
/* CUSTOMIZE */
11 +
/* static */
12 12
13 13
typedef struct {
14 14
	unsigned long mod;
17 17
	Arg arg;
18 18
} Key;
19 19
20 -
const char *browse[] = { "firefox", NULL };
21 -
const char *gimp[] = { "gimp", NULL };
22 -
const char *term[] = { /*"xterm", NULL };*/
23 -
	"urxvt", "-tr", "+sb", "-bg", "black", "-fg", "white", "-cr", "white",
24 -
	"-fn", "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", NULL
25 -
};
26 -
const char *xlock[] = { "xlock", NULL };
27 -
28 -
static Key key[] = {
29 -
	/* modifier		key		function	arguments */
30 -
	{ MODKEY,		XK_0,		view,		{ .i = Tfnord } }, 
31 -
	{ MODKEY,		XK_1,		view,		{ .i = Tdev } }, 
32 -
	{ MODKEY,		XK_2,		view,		{ .i = Tnet } }, 
33 -
	{ MODKEY,		XK_3,		view,		{ .i = Twork } }, 
34 -
	{ MODKEY,		XK_4,		view,		{ .i = Tmisc} }, 
35 -
	{ MODKEY,		XK_h,		viewprev,	{ 0 } },
36 -
	{ MODKEY,		XK_j,		focusnext,	{ 0 } }, 
37 -
	{ MODKEY,		XK_k,		focusprev,	{ 0 } },
38 -
	{ MODKEY,		XK_l,		viewnext,	{ 0 } },
39 -
	{ MODKEY,		XK_m,		togglemax,	{ 0 } }, 
40 -
	{ MODKEY,		XK_space,	togglemode,	{ 0 } }, 
41 -
	{ MODKEY,		XK_Return,	zoom,		{ 0 } },
42 -
	{ MODKEY|ControlMask,	XK_0,		appendtag,	{ .i = Tfnord } }, 
43 -
	{ MODKEY|ControlMask,	XK_1,		appendtag,	{ .i = Tdev } }, 
44 -
	{ MODKEY|ControlMask,	XK_2,		appendtag,	{ .i = Tnet } }, 
45 -
	{ MODKEY|ControlMask,	XK_3,		appendtag,	{ .i = Twork } }, 
46 -
	{ MODKEY|ControlMask,	XK_4,		appendtag,	{ .i = Tmisc } }, 
47 -
	{ MODKEY|ShiftMask,	XK_0,		replacetag,	{ .i = Tfnord } }, 
48 -
	{ MODKEY|ShiftMask,	XK_1,		replacetag,	{ .i = Tdev } }, 
49 -
	{ MODKEY|ShiftMask,	XK_2,		replacetag,	{ .i = Tnet } }, 
50 -
	{ MODKEY|ShiftMask,	XK_3,		replacetag,	{ .i = Twork } }, 
51 -
	{ MODKEY|ShiftMask,	XK_4,		replacetag,	{ .i = Tmisc } }, 
52 -
	{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, 
53 -
	{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } },
54 -
	{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .argv = term } },
55 -
	{ MODKEY|ShiftMask,	XK_g,		spawn,		{ .argv = gimp } },
56 -
	{ MODKEY|ShiftMask,	XK_l,		spawn,		{ .argv = xlock } },
57 -
	{ MODKEY|ShiftMask,	XK_w,		spawn,		{ .argv = browse } },
58 -
};
20 +
CMDS
21 +
KEYS
59 22
60 -
#define NumLockMask Mod2Mask
61 -
unsigned int valid_mask =  255 &  ~( NumLockMask | LockMask);
62 -
63 -
/* END CUSTOMIZE */
64 -
65 -
/* static */
23 +
static unsigned int valid_mask =  255 &  ~(NUMLOCKMASK | LockMask);
66 24
67 25
static void
68 26
movemouse(Client *c)
381 339
	for(i = 0; i < len; i++) {
382 340
		code = XKeysymToKeycode(dpy, key[i].keysym);
383 341
		XUngrabKey(dpy, code, key[i].mod, root);
384 -
		if (NumLockMask)
385 -
		{
386 -
			XUngrabKey(dpy, code, key[i].mod | NumLockMask, root);
387 -
			XUngrabKey(dpy, code, key[i].mod | NumLockMask | LockMask, root);
388 -
		}
342 +
		XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root);
343 +
		XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root);
389 344
		XGrabKey(dpy, code, key[i].mod, root, True,
390 345
				GrabModeAsync, GrabModeAsync);
391 -
		if (NumLockMask)
392 -
		{
393 -
			XGrabKey(dpy, code, key[i].mod | NumLockMask, root, True,
394 -
					GrabModeAsync, GrabModeAsync);
395 -
			XGrabKey(dpy, code, key[i].mod | NumLockMask | LockMask, root, True,
396 -
					GrabModeAsync, GrabModeAsync);
397 -
		}
346 +
		XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True,
347 +
				GrabModeAsync, GrabModeAsync);
348 +
		XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True,
349 +
				GrabModeAsync, GrabModeAsync);
398 350
	}
399 351
}
main.c +1 −3
85 85
/* extern */
86 86
87 87
char stext[1024];
88 -
/* CUSTOMIZE */
89 -
int tsel = Tdev; /* default tag */
90 -
/* END CUSTOMIZE */
88 +
int tsel = DEFTAG;
91 89
int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
92 90
Atom wmatom[WMLast], netatom[NetLast];
93 91
Bool running = True;
tag.c +3 −17
18 18
	Bool isfloat;
19 19
} Rule;
20 20
21 -
/* CUSTOMIZE */ 
22 -
static Rule rule[] = {
23 -
	/* class:instance	tags				isfloat */
24 -
	{ "Firefox.*",		{ [Tnet] = "net" },		False },
25 -
	{ "Gimp.*",		{ 0 },				True},
26 -
};
27 -
28 -
char *tags[TLast] = {
29 -
	[Tfnord] = "fnord",
30 -
	[Tdev] = "dev",
31 -
	[Tnet] = "net",
32 -
	[Twork] = "work",
33 -
	[Tmisc] = "misc",
34 -
};
35 -
36 -
void (*arrange)(Arg *) = dotile;
21 +
TAGS
22 +
RULES
37 23
38 -
/* END CUSTOMIZE */
24 +
void (*arrange)(Arg *) = ARRANGE;
39 25
40 26
/* extern */
41 27