diff options
| author | Anselm R. Garbe <garbeam@gmail.com> | 2007-08-16 17:55:55 +0200 | 
|---|---|---|
| committer | Anselm R. Garbe <garbeam@gmail.com> | 2007-08-16 17:55:55 +0200 | 
| commit | 10bc0ce912eb99fec49d954c80d92e04429ed0ee (patch) | |
| tree | 524951e34fcd67e59b672c4ae203b71f94a214b3 | |
| parent | e8792d95a12c85f9e660e192cd2c6260a01a3c5e (diff) | |
made tag/view/toggle{tag,view} work on pointer to tags-array, there was the need to define Key key[] not static to do this. split focusclient into focusnext/prev, fixed config.*.h's
| -rw-r--r-- | config.arg.h | 78 | ||||
| -rw-r--r-- | config.default.h | 78 | ||||
| -rw-r--r-- | dwm.h | 3 | ||||
| -rw-r--r-- | event.c | 20 | ||||
| -rw-r--r-- | layout.c | 34 | ||||
| -rw-r--r-- | tag.c | 26 | 
6 files changed, 127 insertions, 112 deletions
| diff --git a/config.arg.h b/config.arg.h index 18be75b..ca23b24 100644 --- a/config.arg.h +++ b/config.arg.h @@ -37,7 +37,7 @@ static Layout layout[] = { \  /* key definitions */  #define MODKEY			Mod1Mask  #define KEYS \ -static Key key[] = { \ +Key key[] = { \  	/* modifier			key		function	argument */ \  	{ MODKEY,			XK_p,		spawn, \  		"exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'" \ @@ -46,8 +46,8 @@ static Key key[] = { \  		"exec urxvtcd -tr -bg '#111' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" }, \  	{ MODKEY,			XK_space,	setlayout,	NULL }, \  	{ MODKEY,			XK_b,		togglebar,	NULL }, \ -	{ MODKEY,			XK_j,		focusclient,	"1" }, \ -	{ MODKEY,			XK_k,		focusclient,	"-1" }, \ +	{ MODKEY,			XK_j,		focusnext,	NULL }, \ +	{ MODKEY,			XK_k,		focusprev,	NULL }, \  	{ MODKEY,			XK_h,		addtomwfact,	"-0.05" }, \  	{ MODKEY,			XK_l,		addtomwfact,	"0.05" }, \  	{ MODKEY,			XK_m,		togglemax,	NULL }, \ @@ -55,42 +55,42 @@ static Key key[] = { \  	{ MODKEY|ShiftMask,		XK_space,	togglefloating,	NULL }, \  	{ MODKEY|ShiftMask,		XK_c,		killclient,	NULL }, \  	{ MODKEY,			XK_0,		view,		NULL }, \ -	{ MODKEY,			XK_1,		view,		"0" }, \ -	{ MODKEY,			XK_2,		view,		"1" }, \ -	{ MODKEY,			XK_3,		view,		"2" }, \ -	{ MODKEY,			XK_4,		view,		"3" }, \ -	{ MODKEY,			XK_5,		view,		"4" }, \ -	{ MODKEY,			XK_6,		view,		"5" }, \ -	{ MODKEY,			XK_7,		view,		"6" }, \ -	{ MODKEY,			XK_8,		view,		"7" }, \ -	{ MODKEY,			XK_9,		view,		"8" }, \ -	{ MODKEY|ControlMask,		XK_1,		toggleview,	"0" }, \ -	{ MODKEY|ControlMask,		XK_2,		toggleview,	"1" }, \ -	{ MODKEY|ControlMask,		XK_3,		toggleview,	"2" }, \ -	{ MODKEY|ControlMask,		XK_4,		toggleview,	"3" }, \ -	{ MODKEY|ControlMask,		XK_5,		toggleview,	"4" }, \ -	{ MODKEY|ControlMask,		XK_6,		toggleview,	"5" }, \ -	{ MODKEY|ControlMask,		XK_7,		toggleview,	"6" }, \ -	{ MODKEY|ControlMask,		XK_8,		toggleview,	"7" }, \ -	{ MODKEY|ControlMask,		XK_9,		toggleview,	"8" }, \ +	{ MODKEY,			XK_1,		view,		tags[0] }, \ +	{ MODKEY,			XK_2,		view,		tags[1] }, \ +	{ MODKEY,			XK_3,		view,		tags[2] }, \ +	{ MODKEY,			XK_4,		view,		tags[3] }, \ +	{ MODKEY,			XK_5,		view,		tags[4] }, \ +	{ MODKEY,			XK_6,		view,		tags[5] }, \ +	{ MODKEY,			XK_7,		view,		tags[6] }, \ +	{ MODKEY,			XK_8,		view,		tags[7] }, \ +	{ MODKEY,			XK_9,		view,		tags[8] }, \ +	{ MODKEY|ControlMask,		XK_1,		toggleview,	tags[0] }, \ +	{ MODKEY|ControlMask,		XK_2,		toggleview,	tags[1] }, \ +	{ MODKEY|ControlMask,		XK_3,		toggleview,	tags[2] }, \ +	{ MODKEY|ControlMask,		XK_4,		toggleview,	tags[3] }, \ +	{ MODKEY|ControlMask,		XK_5,		toggleview,	tags[4] }, \ +	{ MODKEY|ControlMask,		XK_6,		toggleview,	tags[5] }, \ +	{ MODKEY|ControlMask,		XK_7,		toggleview,	tags[6] }, \ +	{ MODKEY|ControlMask,		XK_8,		toggleview,	tags[7] }, \ +	{ MODKEY|ControlMask,		XK_9,		toggleview,	tags[8] }, \  	{ MODKEY|ShiftMask,		XK_0,		tag,		NULL }, \ -	{ MODKEY|ShiftMask,		XK_1,		tag,		"0" }, \ -	{ MODKEY|ShiftMask,		XK_2,		tag,		"1" }, \ -	{ MODKEY|ShiftMask,		XK_3,		tag,		"2" }, \ -	{ MODKEY|ShiftMask,		XK_4,		tag,		"3" }, \ -	{ MODKEY|ShiftMask,		XK_5,		tag,		"4" }, \ -	{ MODKEY|ShiftMask,		XK_6,		tag,		"5" }, \ -	{ MODKEY|ShiftMask,		XK_7,		tag,		"6" }, \ -	{ MODKEY|ShiftMask,		XK_8,		tag,		"7" }, \ -	{ MODKEY|ShiftMask,		XK_9,		tag,		"8" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_1,		toggletag,	"0" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_2,		toggletag,	"1" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_3,		toggletag,	"2" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_4,		toggletag,	"3" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_5,		toggletag,	"4" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_6,		toggletag,	"5" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_7,		toggletag,	"6" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_8,		toggletag,	"7" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_9,		toggletag,	"8" }, \ +	{ MODKEY|ShiftMask,		XK_1,		tag,		tags[0] }, \ +	{ MODKEY|ShiftMask,		XK_2,		tag,		tags[1] }, \ +	{ MODKEY|ShiftMask,		XK_3,		tag,		tags[2] }, \ +	{ MODKEY|ShiftMask,		XK_4,		tag,		tags[3] }, \ +	{ MODKEY|ShiftMask,		XK_5,		tag,		tags[4] }, \ +	{ MODKEY|ShiftMask,		XK_6,		tag,		tags[5] }, \ +	{ MODKEY|ShiftMask,		XK_7,		tag,		tags[6] }, \ +	{ MODKEY|ShiftMask,		XK_8,		tag,		tags[7] }, \ +	{ MODKEY|ShiftMask,		XK_9,		tag,		tags[8] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_1,		toggletag,	tags[0] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_2,		toggletag,	tags[1] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_3,		toggletag,	tags[2] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_4,		toggletag,	tags[3] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_5,		toggletag,	tags[4] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_6,		toggletag,	tags[5] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_7,		toggletag,	tags[6] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_8,		toggletag,	tags[7] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_9,		toggletag,	tags[8] }, \  	{ MODKEY|ShiftMask,		XK_q,		quit,		NULL }, \  }; diff --git a/config.default.h b/config.default.h index dcf13e3..878e0a4 100644 --- a/config.default.h +++ b/config.default.h @@ -38,14 +38,14 @@ static Layout layout[] = { \  /* key definitions */  #define MODKEY			Mod1Mask  #define KEYS \ -static Key key[] = { \ +Key key[] = { \  	/* modifier			key		function	argument */ \  	{ MODKEY|ShiftMask,		XK_Return,	spawn,		"exec xterm" }, \  	{ MODKEY,			XK_p,		spawn, 		"exe=`dmenu_path | dmenu` && exec $exe" }, \  	{ MODKEY,			XK_space,	setlayout,	NULL }, \  	{ MODKEY,			XK_b,		togglebar,	NULL }, \ -	{ MODKEY,			XK_j,		focusclient,	"1" }, \ -	{ MODKEY,			XK_k,		focusclient,	"-1" }, \ +	{ MODKEY,			XK_j,		focusnext,	NULL }, \ +	{ MODKEY,			XK_k,		focusprev,	NULL }, \  	{ MODKEY,			XK_h,		addtomwfact,	"-0.05" }, \  	{ MODKEY,			XK_l,		addtomwfact,	"0.05" }, \  	{ MODKEY,			XK_m,		togglemax,	NULL }, \ @@ -53,42 +53,42 @@ static Key key[] = { \  	{ MODKEY|ShiftMask,		XK_space,	togglefloating,	NULL }, \  	{ MODKEY|ShiftMask,		XK_c,		killclient,	NULL }, \  	{ MODKEY,			XK_0,		view,		NULL }, \ -	{ MODKEY,			XK_1,		view,		"0" }, \ -	{ MODKEY,			XK_2,		view,		"1" }, \ -	{ MODKEY,			XK_3,		view,		"2" }, \ -	{ MODKEY,			XK_4,		view,		"3" }, \ -	{ MODKEY,			XK_5,		view,		"4" }, \ -	{ MODKEY,			XK_6,		view,		"5" }, \ -	{ MODKEY,			XK_7,		view,		"6" }, \ -	{ MODKEY,			XK_8,		view,		"7" }, \ -	{ MODKEY,			XK_9,		view,		"8" }, \ -	{ MODKEY|ControlMask,		XK_1,		toggleview,	"0" }, \ -	{ MODKEY|ControlMask,		XK_2,		toggleview,	"1" }, \ -	{ MODKEY|ControlMask,		XK_3,		toggleview,	"2" }, \ -	{ MODKEY|ControlMask,		XK_4,		toggleview,	"3" }, \ -	{ MODKEY|ControlMask,		XK_5,		toggleview,	"4" }, \ -	{ MODKEY|ControlMask,		XK_6,		toggleview,	"5" }, \ -	{ MODKEY|ControlMask,		XK_7,		toggleview,	"6" }, \ -	{ MODKEY|ControlMask,		XK_8,		toggleview,	"7" }, \ -	{ MODKEY|ControlMask,		XK_9,		toggleview,	"8" }, \ +	{ MODKEY,			XK_1,		view,		tags[0] }, \ +	{ MODKEY,			XK_2,		view,		tags[1] }, \ +	{ MODKEY,			XK_3,		view,		tags[2] }, \ +	{ MODKEY,			XK_4,		view,		tags[3] }, \ +	{ MODKEY,			XK_5,		view,		tags[4] }, \ +	{ MODKEY,			XK_6,		view,		tags[5] }, \ +	{ MODKEY,			XK_7,		view,		tags[6] }, \ +	{ MODKEY,			XK_8,		view,		tags[7] }, \ +	{ MODKEY,			XK_9,		view,		tags[8] }, \ +	{ MODKEY|ControlMask,		XK_1,		toggleview,	tags[0] }, \ +	{ MODKEY|ControlMask,		XK_2,		toggleview,	tags[1] }, \ +	{ MODKEY|ControlMask,		XK_3,		toggleview,	tags[2] }, \ +	{ MODKEY|ControlMask,		XK_4,		toggleview,	tags[3] }, \ +	{ MODKEY|ControlMask,		XK_5,		toggleview,	tags[4] }, \ +	{ MODKEY|ControlMask,		XK_6,		toggleview,	tags[5] }, \ +	{ MODKEY|ControlMask,		XK_7,		toggleview,	tags[6] }, \ +	{ MODKEY|ControlMask,		XK_8,		toggleview,	tags[7] }, \ +	{ MODKEY|ControlMask,		XK_9,		toggleview,	tags[8] }, \  	{ MODKEY|ShiftMask,		XK_0,		tag,		NULL }, \ -	{ MODKEY|ShiftMask,		XK_1,		tag,		"0" }, \ -	{ MODKEY|ShiftMask,		XK_2,		tag,		"1" }, \ -	{ MODKEY|ShiftMask,		XK_3,		tag,		"2" }, \ -	{ MODKEY|ShiftMask,		XK_4,		tag,		"3" }, \ -	{ MODKEY|ShiftMask,		XK_5,		tag,		"4" }, \ -	{ MODKEY|ShiftMask,		XK_6,		tag,		"5" }, \ -	{ MODKEY|ShiftMask,		XK_7,		tag,		"6" }, \ -	{ MODKEY|ShiftMask,		XK_8,		tag,		"7" }, \ -	{ MODKEY|ShiftMask,		XK_9,		tag,		"8" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_1,		toggletag,	"0" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_2,		toggletag,	"1" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_3,		toggletag,	"2" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_4,		toggletag,	"3" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_5,		toggletag,	"4" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_6,		toggletag,	"5" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_7,		toggletag,	"6" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_8,		toggletag,	"7" }, \ -	{ MODKEY|ControlMask|ShiftMask,	XK_9,		toggletag,	"8" }, \ +	{ MODKEY|ShiftMask,		XK_1,		tag,		tags[0] }, \ +	{ MODKEY|ShiftMask,		XK_2,		tag,		tags[1] }, \ +	{ MODKEY|ShiftMask,		XK_3,		tag,		tags[2] }, \ +	{ MODKEY|ShiftMask,		XK_4,		tag,		tags[3] }, \ +	{ MODKEY|ShiftMask,		XK_5,		tag,		tags[4] }, \ +	{ MODKEY|ShiftMask,		XK_6,		tag,		tags[5] }, \ +	{ MODKEY|ShiftMask,		XK_7,		tag,		tags[6] }, \ +	{ MODKEY|ShiftMask,		XK_8,		tag,		tags[7] }, \ +	{ MODKEY|ShiftMask,		XK_9,		tag,		tags[8] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_1,		toggletag,	tags[0] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_2,		toggletag,	tags[1] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_3,		toggletag,	tags[2] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_4,		toggletag,	tags[3] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_5,		toggletag,	tags[4] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_6,		toggletag,	tags[5] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_7,		toggletag,	tags[6] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_8,		toggletag,	tags[7] }, \ +	{ MODKEY|ControlMask|ShiftMask,	XK_9,		toggletag,	tags[8] }, \  	{ MODKEY|ShiftMask,		XK_q,		quit,		NULL }, \  }; @@ -114,7 +114,8 @@ void grabkeys(void);			/* grab all keys defined in config.h */  /* layout.c */  void arrange(void);			/* arranges all windows depending on the layout in use */ -void focusclient(const char *arg);	/* focuses next(1)/previous(-1) visible client */ +void focusnext(const char *arg);	/* focuses next visible client */ +void focusprev(const char *arg);	/* focuses prev visible client */  const char *getsymbol(void);		/* returns symbol of enabled layout */  Bool isfloating(void);			/* returns True if floating layout is enabled */  Bool isarrange(void (*func)());		/* returns True if func is the layout function in use */ @@ -1,6 +1,5 @@  /* See LICENSE file for copyright and license details. */  #include "dwm.h" -#include <stdio.h>  #include <stdlib.h>  #include <X11/keysym.h>  #include <X11/Xatom.h> @@ -15,8 +14,6 @@ typedef struct {  	const char *arg;  } Key; -KEYS -  #define CLEANMASK(mask)		(mask & ~(numlockmask | LockMask))  #define MOUSEMASK		(BUTTONMASK | PointerMotionMask) @@ -112,29 +109,26 @@ resizemouse(Client *c) {  static void  buttonpress(XEvent *e) { -	static char buf[32];  	unsigned int i, x;  	Client *c;  	XButtonPressedEvent *ev = &e->xbutton; -	buf[0] = 0;  	if(barwin == ev->window) {  		x = 0;  		for(i = 0; i < ntags; i++) {  			x += textw(tags[i]);  			if(ev->x < x) { -				snprintf(buf, sizeof buf, "%d", i);  				if(ev->button == Button1) {  					if(ev->state & MODKEY) -						tag(buf); +						tag(tags[i]);  					else -						view(buf); +						view(tags[i]);  				}  				else if(ev->button == Button3) {  					if(ev->state & MODKEY) -						toggletag(buf); +						toggletag(tags[i]);  					else -						toggleview(buf); +						toggleview(tags[i]);  				}  				return;  			} @@ -257,7 +251,8 @@ expose(XEvent *e) {  static void  keypress(XEvent *e) { -	static unsigned int len = sizeof key / sizeof key[0]; +	KEYS +	unsigned int len = sizeof key / sizeof key[0];  	unsigned int i;  	KeySym keysym;  	XKeyEvent *ev = &e->xkey; @@ -362,7 +357,8 @@ void (*handler[LASTEvent]) (XEvent *) = {  void  grabkeys(void) { -	static unsigned int len = sizeof key / sizeof key[0]; +	KEYS +	unsigned int len = sizeof key / sizeof key[0];  	unsigned int i;  	KeyCode code; @@ -42,22 +42,30 @@ arrange(void) {  }  void -focusclient(const char *arg) { +focusnext(const char *arg) {  	Client *c; -    -	if(!sel || !arg) + +	if(!sel)  		return; -	if(atoi(arg) < 0) { -		for(c = sel->prev; c && !isvisible(c); c = c->prev); -		if(!c) { -			for(c = clients; c && c->next; c = c->next); -			for(; c && !isvisible(c); c = c->prev); -		} +	for(c = sel->next; c && !isvisible(c); c = c->next); +	if(!c) +		for(c = clients; c && !isvisible(c); c = c->next); +	if(c) { +		focus(c); +		restack();  	} -	else { -		for(c = sel->next; c && !isvisible(c); c = c->next); -		if(!c) -			for(c = clients; c && !isvisible(c); c = c->next); +} + +void +focusprev(const char *arg) { +	Client *c; + +	if(!sel) +		return; +	for(c = sel->prev; c && !isvisible(c); c = c->prev); +	if(!c) { +		for(c = clients; c && c->next; c = c->next); +		for(; c && !isvisible(c); c = c->prev);  	}  	if(c) {  		focus(c); @@ -40,6 +40,16 @@ persistconfig(Client *c) {  			PropModeReplace, (unsigned char *)prop, i);  } +static unsigned int +idxoftag(const char *tag) { +	unsigned int i; + +	for(i = 0; i < ntags; i++) +		if(tags[i] == tag) +			return i; +	return 0; +} +  /* extern */  void @@ -135,13 +145,13 @@ settags(Client *c, Client *trans) {  void  tag(const char *arg) { -	int i; +	unsigned int i;  	if(!sel)  		return;  	for(i = 0; i < ntags; i++)  		sel->tags[i] = arg == NULL; -	i = arg ? atoi(arg) : 0; +	i = idxoftag(arg);  	if(i >= 0 && i < ntags)  		sel->tags[i] = True;  	persistconfig(sel); @@ -162,11 +172,11 @@ togglefloating(const char *arg) {  void  toggletag(const char *arg) { -	int i, j; +	unsigned int i, j;  	if(!sel)  		return; -	i = arg ? atoi(arg) : 0; +	i = idxoftag(arg);  	sel->tags[i] = !sel->tags[i];  	for(j = 0; j < ntags && !sel->tags[j]; j++);  	if(j == ntags) @@ -177,9 +187,9 @@ toggletag(const char *arg) {  void  toggleview(const char *arg) { -	int i, j; +	unsigned int i, j; -	i = arg ? atoi(arg) : 0; +	i = idxoftag(arg);  	seltag[i] = !seltag[i];  	for(j = 0; j < ntags && !seltag[j]; j++);  	if(j == ntags) @@ -189,11 +199,11 @@ toggleview(const char *arg) {  void  view(const char *arg) { -	int i; +	unsigned int i;  	for(i = 0; i < ntags; i++)  		seltag[i] = arg == NULL; -	i = arg ? atoi(arg) : 0; +	i = idxoftag(arg);  	if(i >= 0 && i < ntags)  		seltag[i] = True;  	arrange(); | 
