diff options
| author | Anselm R. Garbe <arg@suckless.org> | 2007-02-22 07:59:13 +0100 | 
|---|---|---|
| committer | Anselm R. Garbe <arg@suckless.org> | 2007-02-22 07:59:13 +0100 | 
| commit | 352cae4380713949d3800ebcda7aff3bb5ab9efc (patch) | |
| tree | dd301143a6777dacb09b90d6d27d16aeb19056fc | |
| parent | b3b58c08e4e15c4dbdd04bae52300d1e8effed33 (diff) | |
several changes, made togglemax extern and separated it from zoom() - moved zoom() and togglemax() into layout.c, changed void (*func)(Arg *) into void (*func)(Arg), changed default keybindings of focusnext/focusprev and incmasterw to h/j/k/l accordingly, made keys in config*h appear alphabetically (special keys first), renamed resizemaster into incmasterw, renamed MASTER into MASTERWIDTH
| -rw-r--r-- | client.c | 44 | ||||
| -rw-r--r-- | config.arg.h | 67 | ||||
| -rw-r--r-- | config.default.h | 61 | ||||
| -rw-r--r-- | dwm.1 | 15 | ||||
| -rw-r--r-- | dwm.h | 30 | ||||
| -rw-r--r-- | event.c | 20 | ||||
| -rw-r--r-- | layout.c | 92 | ||||
| -rw-r--r-- | main.c | 2 | ||||
| -rw-r--r-- | tag.c | 28 | ||||
| -rw-r--r-- | util.c | 8 | 
10 files changed, 184 insertions, 183 deletions
| @@ -83,24 +83,6 @@ setclientstate(Client *c, long state) {  			PropModeReplace, (unsigned char *)data, 2);  } -static void -togglemax(Client *c) { -	XEvent ev; - -	if(c->isfixed) -		return; -	if((c->ismax = !c->ismax)) { -		c->rx = c->x; -		c->ry = c->y; -		c->rw = c->w; -		c->rh = c->h; -		resize(c, wax, way, waw - 2 * BORDERPX, wah - 2 * BORDERPX, True); -	} -	else -		resize(c, c->rx, c->ry, c->rw, c->rh, True); -	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); -} -  static int  xerrordummy(Display *dsply, XErrorEvent *ee) {  	return 0; @@ -171,7 +153,7 @@ focus(Client *c) {  }  void -killclient(Arg *arg) { +killclient(Arg arg) {  	if(!sel)  		return;  	if(isprotodel(sel)) @@ -303,7 +285,7 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) {  }  void -toggleversatile(Arg *arg) { +toggleversatile(Arg arg) {  	if(!sel || lt->arrange == versatile)  		return;  	sel->isversatile = !sel->isversatile; @@ -402,25 +384,3 @@ unmanage(Client *c) {  	XUngrabServer(dpy);  	lt->arrange();  } - -void -zoom(Arg *arg) { -	unsigned int n; -	Client *c; - -	if(!sel) -		return; -	if(sel->isversatile || (lt->arrange == versatile)) { -		togglemax(sel); -		return; -	} -	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) -		n++; -	if((c = sel) == nexttiled(clients)) -		if(!(c = nexttiled(c->next))) -			return; -	detach(c); -	attach(c); -	focus(c); -	lt->arrange(); -} diff --git a/config.arg.h b/config.arg.h index a887430..afbc4d1 100644 --- a/config.arg.h +++ b/config.arg.h @@ -14,7 +14,6 @@  #define TOPBAR			True		/* False */  /* behavior */ -#define SNAP			40		/* pixel */  #define TAGS \  const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL };  #define RULES \ @@ -33,27 +32,41 @@ static Layout layout[] = { \  	{ "[]=",		tile }, /* first entry is default */ \  	{ "><>",		versatile }, \  }; -#define MASTER			600		/* per thousand */ +#define MASTERWIDTH		600		/* master width per thousand */  #define NMASTER			1		/* clients in master area */ +#define SNAP			40		/* versatile snap pixel */  /* key definitions */  #define MODKEY			Mod1Mask  #define KEYS \  static Key key[] = { \  	/* modifier			key		function	argument */ \ -	{ MODKEY|ShiftMask,		XK_Return,	spawn, \ -		{ .cmd = "exec urxvtcd -tr -bg '#292929' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" } }, \ +	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \ +	{ MODKEY,			XK_space,	setlayout,	{ .i = -1 } }, \ +	{ MODKEY,			XK_0,		view,		{ .i = -1 } }, \ +	{ MODKEY,			XK_1,		view,		{ .i = 0 } }, \ +	{ MODKEY,			XK_2,		view,		{ .i = 1 } }, \ +	{ MODKEY,			XK_3,		view,		{ .i = 2 } }, \ +	{ MODKEY,			XK_4,		view,		{ .i = 3 } }, \ +	{ MODKEY,			XK_5,		view,		{ .i = 4 } }, \ +	{ MODKEY,			XK_6,		view,		{ .i = 5 } }, \ +	{ MODKEY,			XK_7,		view,		{ .i = 6 } }, \ +	{ MODKEY,			XK_8,		view,		{ .i = 7 } }, \ +	{ MODKEY,			XK_9,		view,		{ .i = 8 } }, \ +	{ MODKEY,			XK_d,		incnmaster,	{ .i = -1 } }, \ +	{ MODKEY,			XK_h,		incmasterw,	{ .i = -15 } }, \ +	{ MODKEY,			XK_i,		incnmaster,	{ .i = 1 } }, \ +	{ MODKEY,			XK_j,		focusnext,	{ 0 } }, \ +	{ MODKEY,			XK_k,		focusprev,	{ 0 } }, \ +	{ MODKEY,			XK_l,		incmasterw,	{ .i = 15 } }, \ +	{ MODKEY,			XK_m,		togglemax,	{ 0 } }, \  	{ MODKEY,			XK_p,		spawn, \  		{ .cmd = "exe=\"$(lsx `echo $PATH | sed 's/:/ /g'` | sort -u " \  			" | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' " \  			"-sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"')\" && exec $exe" } }, \ -	{ MODKEY,			XK_j,		focusnext,	{ 0 } }, \ -	{ MODKEY,			XK_k,		focusprev,	{ 0 } }, \ -	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \ -	{ MODKEY,			XK_g,		resizemaster,	{ .i = 15 } }, \ -	{ MODKEY,			XK_s,		resizemaster,	{ .i = -15 } }, \ -	{ MODKEY,			XK_i,		incnmaster,	{ .i = 1 } }, \ -	{ MODKEY,			XK_d,		incnmaster,	{ .i = -1 } }, \ +	{ MODKEY|ShiftMask,		XK_Return,	spawn, \ +		{ .cmd = "exec urxvtcd -tr -bg '#292929' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" } }, \ +	{ MODKEY|ShiftMask,		XK_space,	toggleversatile,{ 0 } }, \  	{ MODKEY|ShiftMask,		XK_0,		tag,		{ .i = -1 } }, \  	{ MODKEY|ShiftMask,		XK_1,		tag,		{ .i = 0 } }, \  	{ MODKEY|ShiftMask,		XK_2,		tag,		{ .i = 1 } }, \ @@ -64,28 +77,8 @@ static Key key[] = { \  	{ MODKEY|ShiftMask,		XK_7,		tag,		{ .i = 6 } }, \  	{ MODKEY|ShiftMask,		XK_8,		tag,		{ .i = 7 } }, \  	{ MODKEY|ShiftMask,		XK_9,		tag,		{ .i = 8 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_1,		toggletag,	{ .i = 0 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_2,		toggletag,	{ .i = 1 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_3,		toggletag,	{ .i = 2 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_4,		toggletag,	{ .i = 3 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_5,		toggletag,	{ .i = 4 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_6,		toggletag,	{ .i = 5 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_7,		toggletag,	{ .i = 6 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_8,		toggletag,	{ .i = 7 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_9,		toggletag,	{ .i = 8 } }, \  	{ MODKEY|ShiftMask,		XK_c,		killclient,	{ 0 } }, \ -	{ MODKEY,			XK_space,	setlayout,	{ .i = -1 } }, \ -	{ MODKEY|ShiftMask,		XK_space,	toggleversatile,{ 0 } }, \ -	{ MODKEY,			XK_0,		view,		{ .i = -1 } }, \ -	{ MODKEY,			XK_1,		view,		{ .i = 0 } }, \ -	{ MODKEY,			XK_2,		view,		{ .i = 1 } }, \ -	{ MODKEY,			XK_3,		view,		{ .i = 2 } }, \ -	{ MODKEY,			XK_4,		view,		{ .i = 3 } }, \ -	{ MODKEY,			XK_5,		view,		{ .i = 4 } }, \ -	{ MODKEY,			XK_6,		view,		{ .i = 5 } }, \ -	{ MODKEY,			XK_7,		view,		{ .i = 6 } }, \ -	{ MODKEY,			XK_8,		view,		{ .i = 7 } }, \ -	{ MODKEY,			XK_9,		view,		{ .i = 8 } }, \ +	{ MODKEY|ShiftMask,		XK_q,		quit,		{ 0 } }, \  	{ MODKEY|ControlMask,		XK_1,		toggleview,	{ .i = 0 } }, \  	{ MODKEY|ControlMask,		XK_2,		toggleview,	{ .i = 1 } }, \  	{ MODKEY|ControlMask,		XK_3,		toggleview,	{ .i = 2 } }, \ @@ -95,5 +88,13 @@ static Key key[] = { \  	{ MODKEY|ControlMask,		XK_7,		toggleview,	{ .i = 6 } }, \  	{ MODKEY|ControlMask,		XK_8,		toggleview,	{ .i = 7 } }, \  	{ MODKEY|ControlMask,		XK_9,		toggleview,	{ .i = 8 } }, \ -	{ MODKEY|ShiftMask,		XK_q,		quit,		{ 0 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_1,		toggletag,	{ .i = 0 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_2,		toggletag,	{ .i = 1 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_3,		toggletag,	{ .i = 2 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_4,		toggletag,	{ .i = 3 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_5,		toggletag,	{ .i = 4 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_6,		toggletag,	{ .i = 5 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_7,		toggletag,	{ .i = 6 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_8,		toggletag,	{ .i = 7 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_9,		toggletag,	{ .i = 8 } }, \  }; diff --git a/config.default.h b/config.default.h index eb6933b..ebe91e9 100644 --- a/config.default.h +++ b/config.default.h @@ -14,7 +14,6 @@  #define TOPBAR			True		/* False */  /* behavior */ -#define SNAP			20		/* pixel */  #define TAGS \  const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL };  /* Query class:instance:title for regex matching info with following command: @@ -34,22 +33,36 @@ static Layout layout[] = { \  	{ "[]=",		tile }, /* first entry is default */ \  	{ "><>",		versatile }, \  }; -#define MASTER			600		/* per thousand */ +#define MASTERWIDTH		600		/* master width per thousand */  #define NMASTER			1		/* clients in master area */ +#define SNAP			20		/* versatile snap pixel */  /* key definitions */  #define MODKEY			Mod1Mask  #define KEYS \  static Key key[] = { \  	/* modifier			key		function	argument */ \ -	{ MODKEY|ShiftMask,		XK_Return,	spawn,		{ .cmd = "exec xterm" } }, \ -	{ MODKEY,			XK_Tab,		focusnext,	{ 0 } }, \ -	{ MODKEY|ShiftMask,		XK_Tab,		focusprev,	{ 0 } }, \  	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \ -	{ MODKEY,			XK_g,		resizemaster,	{ .i = 15 } }, \ -	{ MODKEY,			XK_s,		resizemaster,	{ .i = -15 } }, \ -	{ MODKEY,			XK_i,		incnmaster,	{ .i = 1 } }, \ +	{ MODKEY,			XK_space,	setlayout,	{ .i = -1 } }, \ +	{ MODKEY,			XK_0,		view,		{ .i = -1 } }, \ +	{ MODKEY,			XK_1,		view,		{ .i = 0 } }, \ +	{ MODKEY,			XK_2,		view,		{ .i = 1 } }, \ +	{ MODKEY,			XK_3,		view,		{ .i = 2 } }, \ +	{ MODKEY,			XK_4,		view,		{ .i = 3 } }, \ +	{ MODKEY,			XK_5,		view,		{ .i = 4 } }, \ +	{ MODKEY,			XK_6,		view,		{ .i = 5 } }, \ +	{ MODKEY,			XK_7,		view,		{ .i = 6 } }, \ +	{ MODKEY,			XK_8,		view,		{ .i = 7 } }, \ +	{ MODKEY,			XK_9,		view,		{ .i = 8 } }, \  	{ MODKEY,			XK_d,		incnmaster,	{ .i = -1 } }, \ +	{ MODKEY,			XK_h,		incmasterw,	{ .i = -15 } }, \ +	{ MODKEY,			XK_i,		incnmaster,	{ .i = 1 } }, \ +	{ MODKEY,			XK_j,		focusnext,	{ 0 } }, \ +	{ MODKEY,			XK_k,		focusprev,	{ 0 } }, \ +	{ MODKEY,			XK_l,		incmasterw,	{ .i = 15 } }, \ +	{ MODKEY,			XK_m,		togglemax,	{ 0 } }, \ +	{ MODKEY|ShiftMask,		XK_Return,	spawn,		{ .cmd = "exec xterm" } }, \ +	{ MODKEY|ShiftMask,		XK_space,	toggleversatile,{ 0 } }, \  	{ MODKEY|ShiftMask,		XK_0,		tag,		{ .i = -1 } }, \  	{ MODKEY|ShiftMask,		XK_1,		tag,		{ .i = 0 } }, \  	{ MODKEY|ShiftMask,		XK_2,		tag,		{ .i = 1 } }, \ @@ -60,28 +73,8 @@ static Key key[] = { \  	{ MODKEY|ShiftMask,		XK_7,		tag,		{ .i = 6 } }, \  	{ MODKEY|ShiftMask,		XK_8,		tag,		{ .i = 7 } }, \  	{ MODKEY|ShiftMask,		XK_9,		tag,		{ .i = 8 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_1,		toggletag,	{ .i = 0 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_2,		toggletag,	{ .i = 1 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_3,		toggletag,	{ .i = 2 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_4,		toggletag,	{ .i = 3 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_5,		toggletag,	{ .i = 4 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_6,		toggletag,	{ .i = 5 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_7,		toggletag,	{ .i = 6 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_8,		toggletag,	{ .i = 7 } }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_9,		toggletag,	{ .i = 8 } }, \  	{ MODKEY|ShiftMask,		XK_c,		killclient,	{ 0 } }, \ -	{ MODKEY,			XK_space,	setlayout,	{ .i = -1 } }, \ -	{ MODKEY|ShiftMask,		XK_space,	toggleversatile,{ 0 } }, \ -	{ MODKEY,			XK_0,		view,		{ .i = -1 } }, \ -	{ MODKEY,			XK_1,		view,		{ .i = 0 } }, \ -	{ MODKEY,			XK_2,		view,		{ .i = 1 } }, \ -	{ MODKEY,			XK_3,		view,		{ .i = 2 } }, \ -	{ MODKEY,			XK_4,		view,		{ .i = 3 } }, \ -	{ MODKEY,			XK_5,		view,		{ .i = 4 } }, \ -	{ MODKEY,			XK_6,		view,		{ .i = 5 } }, \ -	{ MODKEY,			XK_7,		view,		{ .i = 6 } }, \ -	{ MODKEY,			XK_8,		view,		{ .i = 7 } }, \ -	{ MODKEY,			XK_9,		view,		{ .i = 8 } }, \ +	{ MODKEY|ShiftMask,		XK_q,		quit,		{ 0 } }, \  	{ MODKEY|ControlMask,		XK_1,		toggleview,	{ .i = 0 } }, \  	{ MODKEY|ControlMask,		XK_2,		toggleview,	{ .i = 1 } }, \  	{ MODKEY|ControlMask,		XK_3,		toggleview,	{ .i = 2 } }, \ @@ -91,5 +84,13 @@ static Key key[] = { \  	{ MODKEY|ControlMask,		XK_7,		toggleview,	{ .i = 6 } }, \  	{ MODKEY|ControlMask,		XK_8,		toggleview,	{ .i = 7 } }, \  	{ MODKEY|ControlMask,		XK_9,		toggleview,	{ .i = 8 } }, \ -	{ MODKEY|ShiftMask,		XK_q,		quit,		{ 0 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_1,		toggletag,	{ .i = 0 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_2,		toggletag,	{ .i = 1 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_3,		toggletag,	{ .i = 2 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_4,		toggletag,	{ .i = 3 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_5,		toggletag,	{ .i = 4 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_6,		toggletag,	{ .i = 5 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_7,		toggletag,	{ .i = 6 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_8,		toggletag,	{ .i = 7 } }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_9,		toggletag,	{ .i = 8 } }, \  }; @@ -60,19 +60,19 @@ click on a tag label adds/removes that tag to/from the focused window.  Start  .BR xterm (1).  .TP -.B Mod1-Tab +.B Mod1-j  Focus next window.  .TP -.B Mod1-Shift-Tab +.B Mod1-k  Focus previous window.  .TP  .B Mod1-Return -Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (versatile layout). +Zooms/cycles current window to/from master area (tiling layout only).  .TP -.B Mod1-g +.B Mod1-l  Grow master area (tiling layout only).  .TP -.B Mod1-s +.B Mod1-h  Shrink master area (tiling layout only).  .TP  .B Mod1-i @@ -81,6 +81,9 @@ Increase the number of windows in the master area (tiling layout only).  .B Mod1-d  Decrease the number of windows in the master area (tiling layout only).  .TP +.B Mod1-m +Toggles maximization of current window (versatile layout only). +.TP  .B Mod1-Shift-[1..n]  Apply  .RB nth @@ -124,7 +127,7 @@ Quit dwm.  Move current window while dragging (versatile layout only).  .TP  .B Mod1-Button2 -Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (versatile layout). +Zooms/cycles current window to/from master area (tiling layout only).  .TP  .B Mod1-Button3  Resize current window while dragging (versatile layout only). @@ -90,7 +90,6 @@ extern char stext[256];				/* status text */  extern int screen, sx, sy, sw, sh;		/* screen geometry */  extern int wax, way, wah, waw;			/* windowarea geometry */  extern unsigned int bh, blw;			/* bar height, bar layout label width */ -extern unsigned int master, nmaster;		/* master percent, number of master clients */  extern unsigned int ntags, numlockmask;		/* number of tags, dynamic lock mask */  extern void (*handler[LASTEvent])(XEvent *);	/* event handler */  extern Atom wmatom[WMLast], netatom[NetLast]; @@ -105,15 +104,14 @@ extern Window root, barwin;  /* client.c */  extern void configure(Client *c);		/* send synthetic configure event */  extern void focus(Client *c);			/* focus c, c may be NULL */ -extern void killclient(Arg *arg);		/* kill c nicely */ +extern void killclient(Arg arg);		/* kill c nicely */  extern void manage(Window w, XWindowAttributes *wa);	/* manage new client */  extern void resize(Client *c, int x, int y,  		int w, int h, Bool sizehints);	/* resize with given coordinates c*/ -extern void toggleversatile(Arg *arg);		/* toggles focused client between versatile/and non-versatile state */ +extern void toggleversatile(Arg arg);		/* toggles focused client between versatile/and non-versatile state */  extern void updatesizehints(Client *c);		/* update the size hint variables of c */  extern void updatetitle(Client *c);		/* update the name of c */  extern void unmanage(Client *c);		/* destroy c */ -extern void zoom(Arg *arg);			/* zooms the focused client to master area, arg is ignored */  /* draw.c */  extern void drawstatus(void);			/* draw the bar */ @@ -125,18 +123,19 @@ extern unsigned int textw(const char *text);	/* return the width of text in px*/  extern void grabkeys(void);			/* grab all keys defined in config.h */  /* layout.c */ -extern void focusnext(Arg *arg);		/* focuses next visible client, arg is ignored  */ -extern void focusprev(Arg *arg);		/* focuses previous visible client, arg is ignored */ -extern void incnmaster(Arg *arg);		/* increments nmaster with arg's index value */ +extern void focusnext(Arg arg);		/* focuses next visible client, arg is ignored  */ +extern void focusprev(Arg arg);		/* focuses previous visible client, arg is ignored */ +extern void incmasterw(Arg arg);		/* increments the master width with arg's index value */ +extern void incnmaster(Arg arg);		/* increments nmaster with arg's index value */  extern void initlayouts(void);			/* initialize layout array */  extern Client *nexttiled(Client *c);		/* returns tiled successor of c */ -extern void resizemaster(Arg *arg);		/* resizes the master percent with arg's index value */  extern void restack(void);			/* restores z layers of all clients */ -extern void setlayout(Arg *arg);		/* sets layout, -1 toggles */ +extern void setlayout(Arg arg);		/* sets layout, -1 toggles */ +extern void togglemax(Arg arg);			/* toggles maximization of versatile client */  extern void versatile(void);			/* arranges all windows versatile */  /* main.c */ -extern void quit(Arg *arg);			/* quit dwm nicely */ +extern void quit(Arg arg);			/* quit dwm nicely */  extern void sendevent(Window w, Atom a, long value);	/* send synthetic event to w */  extern int xerror(Display *dsply, XErrorEvent *ee);	/* dwm's X error handler */ @@ -144,13 +143,14 @@ extern int xerror(Display *dsply, XErrorEvent *ee);	/* dwm's X error handler */  extern void compileregs(void);			/* initialize regexps of rules defined in config.h */  extern Bool isvisible(Client *c);		/* returns True if client is visible */  extern void settags(Client *c, Client *trans);	/* sets tags of c */ -extern void tag(Arg *arg);			/* tags c with arg's index */ -extern void toggletag(Arg *arg);		/* toggles c tags with arg's index */ -extern void toggleview(Arg *arg);		/* toggles the tag with arg's index (in)visible */ -extern void view(Arg *arg);			/* views the tag with arg's index */ +extern void tag(Arg arg);			/* tags c with arg's index */ +extern void toggletag(Arg arg);		/* toggles c tags with arg's index */ +extern void toggleview(Arg arg);		/* toggles the tag with arg's index (in)visible */ +extern void view(Arg arg);			/* views the tag with arg's index */ +extern void zoom(Arg arg);			/* zooms the focused client to master area, arg is ignored */  /* util.c */  extern void *emallocz(unsigned int size);	/* allocates zero-initialized memory, exits on error */  extern void eprint(const char *errstr, ...);	/* prints errstr and exits with 1 */ -extern void spawn(Arg *arg);			/* forks a new subprocess with arg's cmd */ +extern void spawn(Arg arg);			/* forks a new subprocess with arg's cmd */ @@ -11,7 +11,7 @@  typedef struct {  	unsigned long mod;  	KeySym keysym; -	void (*func)(Arg *arg); +	void (*func)(Arg arg);  	Arg arg;  } Key; @@ -124,15 +124,15 @@ buttonpress(XEvent *e) {  			if(ev->x < x) {  				if(ev->button == Button1) {  					if(ev->state & MODKEY) -						tag(&a); +						tag(a);  					else -						view(&a); +						view(a);  				}  				else if(ev->button == Button3) {  					if(ev->state & MODKEY) -						toggletag(&a); +						toggletag(a);  					else -						toggleview(&a); +						toggleview(a);  				}  				return;  			} @@ -141,15 +141,15 @@ buttonpress(XEvent *e) {  			switch(ev->button) {  			case Button1:  				a.i = -1; -				setlayout(&a); +				setlayout(a);  				break;  			case Button4:  				a.i = 1; -				incnmaster(&a); +				incnmaster(a);  				break;  			case Button5:  				a.i = -1; -				incnmaster(&a); +				incnmaster(a);  				break;  			}  	} @@ -162,7 +162,7 @@ buttonpress(XEvent *e) {  			movemouse(c);  		}  		else if(ev->button == Button2) -			zoom(NULL); +			zoom(a);  		else if(ev->button == Button3  		&& (lt->arrange == versatile || c->isversatile) && !c->isfixed)  		{ @@ -261,7 +261,7 @@ keypress(XEvent *e) {  		&& CLEANMASK(key[i].mod) == CLEANMASK(ev->state))  		{  			if(key[i].func) -				key[i].func(&key[i].arg); +				key[i].func(key[i].arg);  		}  } @@ -3,14 +3,14 @@   */  #include "dwm.h" -unsigned int master = MASTER; -unsigned int nmaster = NMASTER;  unsigned int blw = 0;  Layout *lt = NULL;  /* static */  static unsigned int nlayouts = 0; +static unsigned int masterw = MASTERWIDTH; +static unsigned int nmaster = NMASTER;  static void  tile(void) { @@ -21,7 +21,7 @@ tile(void) {  		n++;  	/* window geoms */  	mh = (n > nmaster) ? wah / nmaster : wah / (n > 0 ? n : 1); -	mw = (n > nmaster) ? (waw * master) / 1000 : waw; +	mw = (n > nmaster) ? (waw * masterw) / 1000 : waw;  	th = (n > nmaster) ? wah / (n - nmaster) : 0;  	tw = waw - mw; @@ -69,7 +69,7 @@ LAYOUTS  /* extern */  void -focusnext(Arg *arg) { +focusnext(Arg arg) {  	Client *c;  	if(!sel) @@ -84,7 +84,7 @@ focusnext(Arg *arg) {  }  void -focusprev(Arg *arg) { +focusprev(Arg arg) {  	Client *c;  	if(!sel) @@ -101,11 +101,26 @@ focusprev(Arg *arg) {  }  void -incnmaster(Arg *arg) { -	if((lt->arrange != tile) || (nmaster + arg->i < 1) -	|| (wah / (nmaster + arg->i) <= 2 * BORDERPX)) +incmasterw(Arg arg) { +	if(lt->arrange != tile) +		return; +	if(arg.i == 0) +		masterw = MASTERWIDTH; +	else { +		if(waw * (masterw + arg.i) / 1000 >= waw - 2 * BORDERPX +		|| waw * (masterw + arg.i) / 1000 <= 2 * BORDERPX) +			return; +		masterw += arg.i; +	} +	lt->arrange(); +} + +void +incnmaster(Arg arg) { +	if((lt->arrange != tile) || (nmaster + arg.i < 1) +	|| (wah / (nmaster + arg.i) <= 2 * BORDERPX))  		return; -	nmaster += arg->i; +	nmaster += arg.i;  	if(sel)  		lt->arrange();  	else @@ -132,21 +147,6 @@ nexttiled(Client *c) {  }  void -resizemaster(Arg *arg) { -	if(lt->arrange != tile) -		return; -	if(arg->i == 0) -		master = MASTER; -	else { -		if(waw * (master + arg->i) / 1000 >= waw - 2 * BORDERPX -		|| waw * (master + arg->i) / 1000 <= 2 * BORDERPX) -			return; -		master += arg->i; -	} -	lt->arrange(); -} - -void  restack(void) {  	Client *c;  	XEvent ev; @@ -170,10 +170,10 @@ restack(void) {  }  void -setlayout(Arg *arg) { +setlayout(Arg arg) {  	unsigned int i; -	if(arg->i == -1) { +	if(arg.i == -1) {  		for(i = 0; i < nlayouts && lt != &layout[i]; i++);  		if(i == nlayouts - 1)  			lt = &layout[0]; @@ -181,9 +181,9 @@ setlayout(Arg *arg) {  			lt = &layout[++i];  	}  	else { -		if(arg->i < 0 || arg->i >= nlayouts) +		if(arg.i < 0 || arg.i >= nlayouts)  			return; -		lt = &layout[arg->i]; +		lt = &layout[arg.i];  	}  	if(sel)  		lt->arrange(); @@ -192,6 +192,24 @@ setlayout(Arg *arg) {  }  void +togglemax(Arg arg) { +	XEvent ev; + +	if(!sel || !sel->isversatile || sel->isfixed || lt->arrange != versatile) +		return; +	if((sel->ismax = !sel->ismax)) { +		sel->rx = sel->x; +		sel->ry = sel->y; +		sel->rw = sel->w; +		sel->rh = sel->h; +		resize(sel, wax, way, waw - 2 * BORDERPX, wah - 2 * BORDERPX, True); +	} +	else +		resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, True); +	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); +} + +void  versatile(void) {  	Client *c; @@ -213,3 +231,21 @@ versatile(void) {  	}  	restack();  } + +void +zoom(Arg arg) { +	unsigned int n; +	Client *c; + +	if(!sel || lt->arrange != tile || sel->isversatile) +		return; +	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) +		n++; +	if((c = sel) == nexttiled(clients)) +		if(!(c = nexttiled(c->next))) +			return; +	detach(c); +	attach(c); +	focus(c); +	lt->arrange(); +} @@ -236,7 +236,7 @@ sendevent(Window w, Atom a, long value) {  }  void -quit(Arg *arg) { +quit(Arg arg) {  	readin = running = False;  } @@ -102,49 +102,49 @@ settags(Client *c, Client *trans) {  }  void -tag(Arg *arg) { +tag(Arg arg) {  	unsigned int i;  	if(!sel)  		return;  	for(i = 0; i < ntags; i++) -		sel->tags[i] = (arg->i == -1) ? True : False; -	if(arg->i >= 0 && arg->i < ntags) -		sel->tags[arg->i] = True; +		sel->tags[i] = (arg.i == -1) ? True : False; +	if(arg.i >= 0 && arg.i < ntags) +		sel->tags[arg.i] = True;  	lt->arrange();  }  void -toggletag(Arg *arg) { +toggletag(Arg arg) {  	unsigned int i;  	if(!sel)  		return; -	sel->tags[arg->i] = !sel->tags[arg->i]; +	sel->tags[arg.i] = !sel->tags[arg.i];  	for(i = 0; i < ntags && !sel->tags[i]; i++);  	if(i == ntags) -		sel->tags[arg->i] = True; +		sel->tags[arg.i] = True;  	lt->arrange();  }  void -toggleview(Arg *arg) { +toggleview(Arg arg) {  	unsigned int i; -	seltag[arg->i] = !seltag[arg->i]; +	seltag[arg.i] = !seltag[arg.i];  	for(i = 0; i < ntags && !seltag[i]; i++);  	if(i == ntags) -		seltag[arg->i] = True; /* cannot toggle last view */ +		seltag[arg.i] = True; /* cannot toggle last view */  	lt->arrange();  }  void -view(Arg *arg) { +view(Arg arg) {  	unsigned int i;  	for(i = 0; i < ntags; i++) -		seltag[i] = (arg->i == -1) ? True : False; -	if(arg->i >= 0 && arg->i < ntags) -		seltag[arg->i] = True; +		seltag[i] = (arg.i == -1) ? True : False; +	if(arg.i >= 0 && arg.i < ntags) +		seltag[arg.i] = True;  	lt->arrange();  } @@ -30,12 +30,12 @@ eprint(const char *errstr, ...) {  }  void -spawn(Arg *arg) { +spawn(Arg arg) {  	static char *shell = NULL;  	if(!shell && !(shell = getenv("SHELL")))  		shell = "/bin/sh"; -	if(!arg->cmd) +	if(!arg.cmd)  		return;  	/* The double-fork construct avoids zombie processes and keeps the code  	 * clean from stupid signal handlers. */ @@ -44,8 +44,8 @@ spawn(Arg *arg) {  			if(dpy)  				close(ConnectionNumber(dpy));  			setsid(); -			execl(shell, shell, "-c", arg->cmd, (char *)NULL); -			fprintf(stderr, "dwm: execl '%s -c %s'", shell, arg->cmd); +			execl(shell, shell, "-c", arg.cmd, (char *)NULL); +			fprintf(stderr, "dwm: execl '%s -c %s'", shell, arg.cmd);  			perror(" failed");  		}  		exit(0); | 
