diff options
| author | Anselm R. Garbe <arg@suckless.org> | 2007-01-05 14:48:16 +0100 | 
|---|---|---|
| committer | Anselm R. Garbe <arg@suckless.org> | 2007-01-05 14:48:16 +0100 | 
| commit | 06bae9dfb7902c97877f3493cf4b489ccf531089 (patch) | |
| tree | 41e684607936b951f00dab79e1a2cb7c0cefe2be | |
| parent | 0b80d1842d1c921a8a94c11fd9222dad9311cc97 (diff) | |
added MODKEY-{plus,minus} shortcuts (increasing/decreasing master clients)
| -rw-r--r-- | config.arg.h | 4 | ||||
| -rw-r--r-- | config.default.h | 2 | ||||
| -rw-r--r-- | dwm.1 | 6 | ||||
| -rw-r--r-- | view.c | 65 | 
4 files changed, 62 insertions, 15 deletions
| diff --git a/config.arg.h b/config.arg.h index d889d96..5167fea 100644 --- a/config.arg.h +++ b/config.arg.h @@ -31,13 +31,13 @@ static Key key[] = { \  		{ .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_d,		incnmaster,	{ .i = -1 } }, \  	{ MODKEY,			XK_j,		focusnext,	{ 0 } }, \  	{ MODKEY,			XK_k,		focusprev,	{ 0 } }, \  	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \  	{ MODKEY,			XK_g,		resizemaster,	{ .i = 15 } }, \ -	{ MODKEY,			XK_i,		incnmaster,	{ .i = 1 } }, \  	{ MODKEY,			XK_s,		resizemaster,	{ .i = -15 } }, \ +	{ MODKEY,			XK_plus,	incnmaster,	{ .i = 1 } }, \ +	{ MODKEY,			XK_minus,	incnmaster,	{ .i = -1 } }, \  	{ MODKEY|ShiftMask,		XK_0,		tag,		{ .i = -1 } }, \  	{ MODKEY|ShiftMask,		XK_1,		tag,		{ .i = 0 } }, \  	{ MODKEY|ShiftMask,		XK_2,		tag,		{ .i = 1 } }, \ diff --git a/config.default.h b/config.default.h index 5b08f93..2015177 100644 --- a/config.default.h +++ b/config.default.h @@ -31,6 +31,8 @@ static Key key[] = { \  	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \  	{ MODKEY,			XK_g,		resizemaster,	{ .i = 15 } }, \  	{ MODKEY,			XK_s,		resizemaster,	{ .i = -15 } }, \ +	{ MODKEY,			XK_plus,	incnmaster,	{ .i = 1 } }, \ +	{ MODKEY,			XK_minus,	incnmaster,	{ .i = -1 } }, \  	{ MODKEY|ShiftMask,		XK_0,		tag,		{ .i = -1 } }, \  	{ MODKEY|ShiftMask,		XK_1,		tag,		{ .i = 0 } }, \  	{ MODKEY|ShiftMask,		XK_2,		tag,		{ .i = 1 } }, \ @@ -70,6 +70,12 @@ Grow master area (tiling mode only).  .B Mod1-s  Shrink master area (tiling mode only).  .TP +.B Mod1-plus +Increase clients of master area (tiling mode only). +.TP +.B Mod1-minus +Decrease clients of master area (tiling mode only). +.TP  .B Mod1-Shift-[1..n]  Apply  .RB nth @@ -11,6 +11,40 @@ nexttiled(Client *c) {  	return c;  } +static Bool +ismaster(Client *c) { +	Client *cl; +	unsigned int i; + +	for(cl = nexttiled(clients), i = 0; cl && cl != c; cl = nexttiled(cl->next), i++); +	return i < nmaster; +} + +static void +pop(Client *c) { +	detach(c); +	if(clients) +		clients->prev = c; +	c->next = clients; +	clients = c; +} + +static void +swap(Client *c1, Client *c2) { +	Client tmp = *c1; +	Client *cp = c1->prev; +	Client *cn = c1->next; + +	*c1 = *c2; +	c1->prev = cp; +	c1->next = cn; +	cp = c2->prev; +	cn = c2->next; +	*c2 = tmp; +	c2->prev = cp; +	c2->next = cn; +} +  static void  togglemax(Client *c) {  	XEvent ev; @@ -34,6 +68,15 @@ togglemax(Client *c) {  	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));  } +static Client * +topofstack() { +	Client *c; +	unsigned int i; + +	for(c = nexttiled(clients), i = 0; c && i < nmaster; c = nexttiled(c->next), i++); +	return (i < nmaster) ? NULL : c; +} +  /* extern */  void (*arrange)(void) = DEFMODE; @@ -248,7 +291,7 @@ view(Arg *arg) {  void  zoom(Arg *arg) { -	unsigned int i, n; +	unsigned int n;  	Client *c;  	if(!sel) @@ -262,19 +305,15 @@ zoom(Arg *arg) {  	if(n <= nmaster || (arrange == dofloat))  		return; -	for(c = nexttiled(clients), i = 0; c && (c != sel) && i < nmaster; c = nexttiled(c->next)) -		i++; -	if(c == sel && i < nmaster) -		for(; c && i < nmaster; c = nexttiled(c->next)) -			i++; -	if(!c) -		return; +	if(ismaster((c = sel))) { +		if(!(c = topofstack())) +			return; +		swap(c, sel); +		c = sel; +	} +	else +		pop(c); -	detach(c); -	if(clients) -		clients->prev = c; -	c->next = clients; -	clients = c;  	focus(c);  	arrange();  } | 
