diff options
| -rw-r--r-- | README | 8 | ||||
| -rw-r--r-- | config.arg.h | 76 | ||||
| -rw-r--r-- | config.h | 67 | ||||
| -rw-r--r-- | config.mk | 7 | ||||
| -rw-r--r-- | dwm.1 | 6 | ||||
| -rw-r--r-- | dwm.h | 21 | ||||
| -rw-r--r-- | event.c | 68 | ||||
| -rw-r--r-- | main.c | 4 | ||||
| -rw-r--r-- | tag.c | 22 | 
9 files changed, 172 insertions, 107 deletions
| @@ -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 new file mode 100644 index 0000000..aeefc5c --- /dev/null +++ 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 new file mode 100644 index 0000000..430539c --- /dev/null +++ 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 @@ -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 @@ -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. @@ -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) @@ -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);  	}  } @@ -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; @@ -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 */ | 
