| 
																	
																	
																	
																 | 
																@ -1,5 +1,7 @@ | 
															
														
														
													
														
															
																 | 
																 | 
																/* See LICENSE file for copyright and license details. */ | 
																 | 
																 | 
																/* See LICENSE file for copyright and license details. */ | 
															
														
														
													
														
															
																 | 
																 | 
																#include "dwm.h" | 
																 | 
																 | 
																#include "dwm.h" | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																#include <regex.h> | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																#include <stdio.h> | 
															
														
														
													
														
															
																 | 
																 | 
																#include <stdlib.h> | 
																 | 
																 | 
																#include <stdlib.h> | 
															
														
														
													
														
															
																 | 
																 | 
																#include <string.h> | 
																 | 
																 | 
																#include <string.h> | 
															
														
														
													
														
															
																 | 
																 | 
																#include <X11/Xatom.h> | 
																 | 
																 | 
																#include <X11/Xatom.h> | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -12,9 +14,35 @@ typedef struct { | 
															
														
														
													
														
															
																 | 
																 | 
																	void (*arrange)(void); | 
																 | 
																 | 
																	void (*arrange)(void); | 
															
														
														
													
														
															
																 | 
																 | 
																} Layout; | 
																 | 
																 | 
																} Layout; | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																unsigned int blw = 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																static char prop[128]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																typedef struct { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	const char *prop; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	const char *tags; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	Bool isfloating; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} Rule; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																typedef struct { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	regex_t *propregex; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	regex_t *tagregex; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} Regs; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																TAGS | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																RULES | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static char prop[512]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static unsigned int nrules = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static unsigned int nlayouts = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																static unsigned int ltidx = 0; /* default */ | 
																 | 
																 | 
																static unsigned int ltidx = 0; /* default */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static Regs *regs = NULL; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static unsigned int | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																idxoftag(const char *tag) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int i; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(i = 0; i < ntags; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if(tags[i] == tag) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			return i; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																static void | 
																 | 
																 | 
																static void | 
															
														
														
													
														
															
																 | 
																 | 
																floating(void) { /* default floating layout */ | 
																 | 
																 | 
																floating(void) { /* default floating layout */ | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -25,12 +53,56 @@ floating(void) { /* default floating layout */ | 
															
														
														
													
														
															
																 | 
																 | 
																			resize(c, c->x, c->y, c->w, c->h, True); | 
																 | 
																 | 
																			resize(c, c->x, c->y, c->w, c->h, True); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																static unsigned int nlayouts = 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																setdwmprops(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int i; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(i = 0; i < ntags && i < sizeof prop - 1; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		prop[i] = seltags[i] ? '1' : '0'; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(i < sizeof prop - 1) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		prop[i++] = (char)ltidx; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	prop[i] = '\0'; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	XChangeProperty(dpy, root, dwmprops, XA_STRING, 8, | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			PropModeReplace, (unsigned char *)prop, i); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																LAYOUTS | 
																 | 
																 | 
																LAYOUTS | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																/* extern */ | 
																 | 
																 | 
																/* extern */ | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																unsigned int blw = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																applyrules(Client *c) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int i, j; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	regmatch_t tmp; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	Bool matched = False; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	XClassHint ch = { 0 }; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	/* rule matching */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	XGetClassHint(dpy, c->win, &ch); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	snprintf(prop, sizeof prop, "%s:%s:%s", | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			ch.res_class ? ch.res_class : "", | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			ch.res_name ? ch.res_name : "", c->name); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(i = 0; i < nrules; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			c->isfloating = rules[i].isfloating; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			for(j = 0; regs[i].tagregex && j < ntags; j++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																					matched = True; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																					c->tags[j] = True; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(ch.res_class) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		XFree(ch.res_class); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(ch.res_name) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		XFree(ch.res_name); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(!matched) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		for(i = 0; i < ntags; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			c->tags[i] = seltags[i]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																arrange(void) { | 
																 | 
																 | 
																arrange(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	Client *c; | 
																 | 
																 | 
																	Client *c; | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -45,6 +117,33 @@ arrange(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	restack(); | 
																 | 
																 | 
																	restack(); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																compileregs(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int i; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	regex_t *reg; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(regs) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		return; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	nrules = sizeof rules / sizeof rules[0]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	regs = emallocz(nrules * sizeof(Regs)); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(i = 0; i < nrules; i++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if(rules[i].prop) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			reg = emallocz(sizeof(regex_t)); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			if(regcomp(reg, rules[i].prop, REG_EXTENDED)) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				free(reg); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			else | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				regs[i].propregex = reg; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if(rules[i].tags) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			reg = emallocz(sizeof(regex_t)); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			if(regcomp(reg, rules[i].tags, REG_EXTENDED)) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				free(reg); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			else | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				regs[i].tagregex = reg; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																focusnext(const char *arg) { | 
																 | 
																 | 
																focusnext(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																	Client *c; | 
																 | 
																 | 
																	Client *c; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -83,6 +182,18 @@ getsymbol(void) | 
															
														
														
													
														
															
																 | 
																 | 
																	return layouts[ltidx].symbol; | 
																 | 
																 | 
																	return layouts[ltidx].symbol; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																initlayouts(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int i, w; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	nlayouts = sizeof layouts / sizeof layouts[0]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(blw = i = 0; i < nlayouts; i++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		w = textw(layouts[i].symbol); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if(w > blw) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			blw = w; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																Bool | 
																 | 
																 | 
																Bool | 
															
														
														
													
														
															
																 | 
																 | 
																isfloating(void) { | 
																 | 
																 | 
																isfloating(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	return layouts[ltidx].arrange == floating; | 
																 | 
																 | 
																	return layouts[ltidx].arrange == floating; | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -94,20 +205,18 @@ isarrange(void (*func)()) | 
															
														
														
													
														
															
																 | 
																 | 
																	return func == layouts[ltidx].arrange; | 
																 | 
																 | 
																	return func == layouts[ltidx].arrange; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																initlayouts(void) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	unsigned int i, w; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																Bool | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																isvisible(Client *c) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int i; | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	nlayouts = sizeof layouts / sizeof layouts[0]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	for(blw = i = 0; i < nlayouts; i++) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		w = textw(layouts[i].symbol); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		if(w > blw) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																			blw = w; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(i = 0; i < ntags; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if(c->tags[i] && seltags[i]) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			return True; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	return False; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																loaddwmprops(void) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																getdwmprops(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	unsigned int i; | 
																 | 
																 | 
																	unsigned int i; | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	if(gettextprop(root, dwmprops, prop, sizeof prop)) { | 
																 | 
																 | 
																	if(gettextprop(root, dwmprops, prop, sizeof prop)) { | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -155,19 +264,6 @@ restack(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | 
																 | 
																 | 
																	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																savedwmprops(void) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	unsigned int i; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	for(i = 0; i < ntags && i < sizeof prop - 1; i++) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		prop[i] = seltags[i] ? '1' : '0'; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	if(i < sizeof prop - 1) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		prop[i++] = (char)ltidx; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	prop[i] = '\0'; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	XChangeProperty(dpy, root, dwmprops, XA_STRING, 8, | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																			PropModeReplace, (unsigned char *)prop, i); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																setlayout(const char *arg) { | 
																 | 
																 | 
																setlayout(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																	int i; | 
																 | 
																 | 
																	int i; | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -186,7 +282,22 @@ setlayout(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																		arrange(); | 
																 | 
																 | 
																		arrange(); | 
															
														
														
													
														
															
																 | 
																 | 
																	else | 
																 | 
																 | 
																	else | 
															
														
														
													
														
															
																 | 
																 | 
																		drawstatus(); | 
																 | 
																 | 
																		drawstatus(); | 
															
														
														
													
														
															
																 | 
																 | 
																	savedwmprops(); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	setdwmprops(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																tag(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int i; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(!sel) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		return; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(i = 0; i < ntags; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		sel->tags[i] = arg == NULL; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	i = idxoftag(arg); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(i >= 0 && i < ntags) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		sel->tags[i] = True; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	setprops(sel); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	arrange(); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																void | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -199,6 +310,18 @@ togglebar(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																	arrange(); | 
																 | 
																 | 
																	arrange(); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																togglefloating(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(!sel || isfloating()) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		return; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	sel->isfloating = !sel->isfloating; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(sel->isfloating) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		resize(sel, sel->x, sel->y, sel->w, sel->h, True); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		setprops(sel); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	arrange(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																togglemax(const char *arg) { | 
																 | 
																 | 
																togglemax(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																	XEvent ev; | 
																 | 
																 | 
																	XEvent ev; | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -217,3 +340,44 @@ togglemax(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																	drawstatus(); | 
																 | 
																 | 
																	drawstatus(); | 
															
														
														
													
														
															
																 | 
																 | 
																	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | 
																 | 
																 | 
																	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																toggletag(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int i, j; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(!sel) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		return; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	i = idxoftag(arg); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	sel->tags[i] = !sel->tags[i]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(j = 0; j < ntags && !sel->tags[j]; j++); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(j == ntags) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		sel->tags[i] = True; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	setprops(sel); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	arrange(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																toggleview(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int i, j; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	i = idxoftag(arg); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	seltags[i] = !seltags[i]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(j = 0; j < ntags && !seltags[j]; j++); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(j == ntags) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		seltags[i] = True; /* cannot toggle last view */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	setdwmprops(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	arrange(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																view(const char *arg) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int i; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(i = 0; i < ntags; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		seltags[i] = arg == NULL; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	i = idxoftag(arg); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(i >= 0 && i < ntags) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		seltags[i] = True; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	setdwmprops(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	arrange(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} |