diff options
| author | Anselm R Garbe <garbeam@gmail.com> | 2008-05-11 14:40:37 +0100 | 
|---|---|---|
| committer | Anselm R Garbe <garbeam@gmail.com> | 2008-05-11 14:40:37 +0100 | 
| commit | 5602f44b29b5c9a9b66b012b34f5749929c5cd31 (patch) | |
| tree | 18cd47f98c6acce2a1a32bc098fbc71e9389c497 | |
| parent | b848f4bda8861115c04aecd9fd87baf928d931de (diff) | |
implemented exact focus next, if arg != NULL to focus{next,prev}
| -rw-r--r-- | config.def.h | 2 | ||||
| -rw-r--r-- | config.mk | 4 | ||||
| -rw-r--r-- | dwm.1 | 6 | ||||
| -rw-r--r-- | dwm.c | 32 | 
4 files changed, 27 insertions, 17 deletions
| diff --git a/config.def.h b/config.def.h index ed3f624..d7824e3 100644 --- a/config.def.h +++ b/config.def.h @@ -53,7 +53,9 @@ Key keys[] = {  		"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" },  	{ MODKEY|ShiftMask,		XK_Return,	spawn,		"exec uxterm" },  	{ MODKEY,			XK_j,		focusnext,	NULL }, +	{ MODKEY|ShiftMask,		XK_j,		focusnext,	"exact" },  	{ MODKEY,			XK_k,		focusprev,	NULL }, +	{ MODKEY|ShiftMask,		XK_k,		focusprev,	"exact" },  	{ MODKEY,			XK_r,		reapply,	NULL },  	{ MODKEY,			XK_h,		setmfact,	"-0.05" },  	{ MODKEY,			XK_l,		setmfact,	"+0.05" }, @@ -17,8 +17,8 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11  # flags  CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"  LDFLAGS = -s ${LIBS} -#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" -#LDFLAGS = -g ${LIBS} +CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" +LDFLAGS = -g ${LIBS}  # Solaris  #CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\" @@ -66,9 +66,15 @@ Toggles between geometries.  .B Mod1\-j  Focus next window.  .TP +.B Mod1\-Shift\-j +Focus next window with exactly the same tags as the current one. +.TP  .B Mod1\-k  Focus previous window.  .TP +.B Mod1\-Shift\-k +Focus previous window with exactly the same tags as the current one. +.TP  .B Mod1\-h  Decrease master area size.  .TP @@ -160,7 +160,7 @@ void initfont(const char *fontstr);  Bool isoccupied(unsigned int t);  Bool isprotodel(Client *c);  Bool isurgent(unsigned int t); -Bool isvisible(Client *c); +Bool isvisible(Client *c, Bool *cmp);  void keypress(XEvent *e);  void killclient(const char *arg);  void manage(Window w, XWindowAttributes *wa); @@ -287,7 +287,7 @@ arrange(void) {  	Client *c;  	for(c = clients; c; c = c->next) -		if(isvisible(c)) { +		if(isvisible(c, NULL)) {  			unban(c);  			if(lt->isfloating || c->isfloating)  				resize(c, c->fx, c->fy, c->fw, c->fh, True); @@ -469,7 +469,7 @@ configurerequest(XEvent *e) {  			if((ev->value_mask & (CWX|CWY))  			&& !(ev->value_mask & (CWWidth|CWHeight)))  				configure(c); -			if(isvisible(c)) +			if(isvisible(c, NULL))  				XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);  		}  		else @@ -536,7 +536,7 @@ drawbar(void) {  		drawtext(geom->symbol, dc.norm, False);  		dc.x += bgw;  	} -	for(c = stack; c && !isvisible(c); c = c->snext); +	for(c = stack; c && !isvisible(c, NULL); c = c->snext);  	for(i = 0; i < LENGTH(tags); i++) {  		dc.w = textw(tags[i]);  		if(tagset[seltags][i]) { @@ -676,8 +676,8 @@ expose(XEvent *e) {  void  focus(Client *c) { -	if(!c || (c && !isvisible(c))) -		for(c = stack; c && !isvisible(c); c = c->snext); +	if(!c || (c && !isvisible(c, NULL))) +		for(c = stack; c && !isvisible(c, NULL); c = c->snext);  	if(sel && sel != c) {  		grabbuttons(sel, False);  		XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]); @@ -711,9 +711,9 @@ focusnext(const char *arg) {  	if(!sel)  		return; -	for(c = sel->next; c && !isvisible(c); c = c->next); +	for(c = sel->next; c && !isvisible(c, arg ? sel->tags : NULL); c = c->next);  	if(!c) -		for(c = clients; c && !isvisible(c); c = c->next); +		for(c = clients; c && !isvisible(c, arg ? sel->tags : NULL); c = c->next);  	if(c) {  		focus(c);  		restack(); @@ -726,10 +726,10 @@ focusprev(const char *arg) {  	if(!sel)  		return; -	for(c = sel->prev; c && !isvisible(c); c = c->prev); +	for(c = sel->prev; c && !isvisible(c, arg ? sel->tags : NULL); c = c->prev);  	if(!c) {  		for(c = clients; c && c->next; c = c->next); -		for(; c && !isvisible(c); c = c->prev); +		for(; c && !isvisible(c, arg ? sel->tags : NULL); c = c->prev);  	}  	if(c) {  		focus(c); @@ -930,11 +930,13 @@ isurgent(unsigned int t) {  }  Bool -isvisible(Client *c) { +isvisible(Client *c, Bool *cmp) {  	unsigned int i; +	if(!cmp) +		cmp = tagset[seltags];  	for(i = 0; i < LENGTH(tags); i++) -		if(c->tags[i] && tagset[seltags][i]) +		if(c->tags[i] && cmp[i])  			return True;  	return False;  } @@ -1061,7 +1063,7 @@ monocle(void) {  	Client *c;  	for(c = clients; c; c = c->next) -		if((lt->isfloating || !c->isfloating) &&  isvisible(c)) +		if((lt->isfloating || !c->isfloating) &&  isvisible(c, NULL))  			resize(c, mox, moy, mow - 2 * c->bw, moh - 2 * c->bw, RESIZEHINTS);  } @@ -1115,7 +1117,7 @@ movemouse(Client *c) {  Client *  nexttiled(Client *c) { -	for(; c && (c->isfloating || !isvisible(c)); c = c->next); +	for(; c && (c->isfloating || !isvisible(c, NULL)); c = c->next);  	return c;  } @@ -1292,7 +1294,7 @@ restack(void) {  		wc.stack_mode = Below;  		wc.sibling = barwin;  		for(c = stack; c; c = c->snext) -			if(!c->isfloating && isvisible(c)) { +			if(!c->isfloating && isvisible(c, NULL)) {  				XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);  				wc.sibling = c->win;  			} | 
