removed TLast tag enum, now tags is simple defined as char *[] array, the rest is calculated correctly, rules take an int array for the tags
This commit is contained in:
		
							parent
							
								
									666b4563a0
								
							
						
					
					
						commit
						b35575574b
					
				
							
								
								
									
										4
									
								
								client.c
								
								
								
								
							
							
						
						
									
										4
									
								
								client.c
								
								
								
								
							| 
						 | 
					@ -16,7 +16,7 @@ resizetitle(Client *c)
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c->tw = 0;
 | 
						c->tw = 0;
 | 
				
			||||||
	for(i = 0; i < TLast; i++)
 | 
						for(i = 0; i < ntags; i++)
 | 
				
			||||||
		if(c->tags[i])
 | 
							if(c->tags[i])
 | 
				
			||||||
			c->tw += textw(tags[i]);
 | 
								c->tw += textw(tags[i]);
 | 
				
			||||||
	c->tw += textw(c->name);
 | 
						c->tw += textw(c->name);
 | 
				
			||||||
| 
						 | 
					@ -211,6 +211,7 @@ manage(Window w, XWindowAttributes *wa)
 | 
				
			||||||
	XSetWindowAttributes twa;
 | 
						XSetWindowAttributes twa;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c = emallocz(sizeof(Client));
 | 
						c = emallocz(sizeof(Client));
 | 
				
			||||||
 | 
						c->tags = emallocz(ntags * sizeof(Bool));
 | 
				
			||||||
	c->win = w;
 | 
						c->win = w;
 | 
				
			||||||
	c->x = c->tx = wa->x;
 | 
						c->x = c->tx = wa->x;
 | 
				
			||||||
	c->y = c->ty = wa->y;
 | 
						c->y = c->ty = wa->y;
 | 
				
			||||||
| 
						 | 
					@ -429,6 +430,7 @@ unmanage(Client *c)
 | 
				
			||||||
		if(!sel)
 | 
							if(!sel)
 | 
				
			||||||
			sel = clients;
 | 
								sel = clients;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						free(c->tags);
 | 
				
			||||||
	free(c);
 | 
						free(c);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	XSync(dpy, False);
 | 
						XSync(dpy, False);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										52
									
								
								config.arg.h
								
								
								
								
							
							
						
						
									
										52
									
								
								config.arg.h
								
								
								
								
							| 
						 | 
					@ -3,18 +3,11 @@
 | 
				
			||||||
 * See LICENSE file for license details.
 | 
					 * See LICENSE file for license details.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
 | 
					 | 
				
			||||||
#define TAGS \
 | 
					#define TAGS \
 | 
				
			||||||
const char *tags[TLast] = { \
 | 
					const char *tags[] = { "fnord", "dev", "net", "work", "misc", NULL };
 | 
				
			||||||
	[Tfnord] = "fnord", \
 | 
					 | 
				
			||||||
	[Tdev] = "dev", \
 | 
					 | 
				
			||||||
	[Tnet] = "net", \
 | 
					 | 
				
			||||||
	[Twork] = "work", \
 | 
					 | 
				
			||||||
	[Tmisc] = "misc", \
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEFMODE			dotile /* dofloat */
 | 
					#define DEFMODE			dotile /* dofloat */
 | 
				
			||||||
#define DEFTAG			Tdev
 | 
					#define DEFTAG			1 /* index */
 | 
				
			||||||
#define FONT			"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
 | 
					#define FONT			"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
 | 
				
			||||||
#define BGCOLOR			"#0a2c2d"
 | 
					#define BGCOLOR			"#0a2c2d"
 | 
				
			||||||
#define FGCOLOR			"#ddeeee"
 | 
					#define FGCOLOR			"#ddeeee"
 | 
				
			||||||
| 
						 | 
					@ -33,11 +26,11 @@ const char *tags[TLast] = { \
 | 
				
			||||||
	const char *xlock[] = { "xlock", NULL }; \
 | 
						const char *xlock[] = { "xlock", NULL }; \
 | 
				
			||||||
static Key key[] = { \
 | 
					static Key key[] = { \
 | 
				
			||||||
	/* modifier		key		function	arguments */ \
 | 
						/* modifier		key		function	arguments */ \
 | 
				
			||||||
	{ MODKEY,		XK_0,		view,		{ .i = Tfnord } }, \
 | 
						{ MODKEY,		XK_0,		view,		{ .i = 0 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_1,		view,		{ .i = Tdev } }, \
 | 
						{ MODKEY,		XK_1,		view,		{ .i = 1 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_2,		view,		{ .i = Tnet } }, \
 | 
						{ MODKEY,		XK_2,		view,		{ .i = 2 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_3,		view,		{ .i = Twork } }, \
 | 
						{ MODKEY,		XK_3,		view,		{ .i = 3 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_4,		view,		{ .i = Tmisc} }, \
 | 
						{ MODKEY,		XK_4,		view,		{ .i = 4 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_h,		viewprev,	{ 0 } }, \
 | 
						{ MODKEY,		XK_h,		viewprev,	{ 0 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_j,		focusnext,	{ 0 } }, \
 | 
						{ MODKEY,		XK_j,		focusnext,	{ 0 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_k,		focusprev,	{ 0 } }, \
 | 
						{ MODKEY,		XK_k,		focusprev,	{ 0 } }, \
 | 
				
			||||||
| 
						 | 
					@ -45,16 +38,16 @@ static Key key[] = { \
 | 
				
			||||||
	{ MODKEY,		XK_m,		togglemax,	{ 0 } }, \
 | 
						{ MODKEY,		XK_m,		togglemax,	{ 0 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_space,	togglemode,	{ 0 } }, \
 | 
						{ MODKEY,		XK_space,	togglemode,	{ 0 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_Return,	zoom,		{ 0 } }, \
 | 
						{ MODKEY,		XK_Return,	zoom,		{ 0 } }, \
 | 
				
			||||||
	{ MODKEY|ControlMask,	XK_0,		appendtag,	{ .i = Tfnord } }, \
 | 
						{ MODKEY|ControlMask,	XK_0,		appendtag,	{ .i = 0 } }, \
 | 
				
			||||||
	{ MODKEY|ControlMask,	XK_1,		appendtag,	{ .i = Tdev } }, \
 | 
						{ MODKEY|ControlMask,	XK_1,		appendtag,	{ .i = 1 } }, \
 | 
				
			||||||
	{ MODKEY|ControlMask,	XK_2,		appendtag,	{ .i = Tnet } }, \
 | 
						{ MODKEY|ControlMask,	XK_2,		appendtag,	{ .i = 2 } }, \
 | 
				
			||||||
	{ MODKEY|ControlMask,	XK_3,		appendtag,	{ .i = Twork } }, \
 | 
						{ MODKEY|ControlMask,	XK_3,		appendtag,	{ .i = 3 } }, \
 | 
				
			||||||
	{ MODKEY|ControlMask,	XK_4,		appendtag,	{ .i = Tmisc } }, \
 | 
						{ MODKEY|ControlMask,	XK_4,		appendtag,	{ .i = 4 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_0,		replacetag,	{ .i = Tfnord } }, \
 | 
						{ MODKEY|ShiftMask,	XK_0,		replacetag,	{ .i = 0 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_1,		replacetag,	{ .i = Tdev } }, \
 | 
						{ MODKEY|ShiftMask,	XK_1,		replacetag,	{ .i = 1 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_2,		replacetag,	{ .i = Tnet } }, \
 | 
						{ MODKEY|ShiftMask,	XK_2,		replacetag,	{ .i = 2 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_3,		replacetag,	{ .i = Twork } }, \
 | 
						{ MODKEY|ShiftMask,	XK_3,		replacetag,	{ .i = 3 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_4,		replacetag,	{ .i = Tmisc } }, \
 | 
						{ MODKEY|ShiftMask,	XK_4,		replacetag,	{ .i = 5 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, \
 | 
						{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } }, \
 | 
						{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .argv = term } }, \
 | 
						{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .argv = term } }, \
 | 
				
			||||||
| 
						 | 
					@ -64,10 +57,11 @@ static Key key[] = { \
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define RULES \
 | 
					#define RULES \
 | 
				
			||||||
 | 
						const unsigned int firefox[] = { 2 }; \
 | 
				
			||||||
static Rule rule[] = { \
 | 
					static Rule rule[] = { \
 | 
				
			||||||
	/* class:instance	tags				isfloat */ \
 | 
						/* class:instance	tags		isfloat */ \
 | 
				
			||||||
	{ "Firefox.*",		{ [Tnet] = True },		False }, \
 | 
						{ "Firefox.*",		firefox,	False }, \
 | 
				
			||||||
	{ "Gimp.*",		{ 0 },				True}, \
 | 
						{ "Gimp.*",		NULL,		True}, \
 | 
				
			||||||
	{ "MPlayer.*",		{ 0 },				True}, \
 | 
						{ "MPlayer.*",		NULL,		True}, \
 | 
				
			||||||
	{ "Acroread.*",		{ 0 },				True}, \
 | 
						{ "Acroread.*",		NULL,		True}, \
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,18 +3,11 @@
 | 
				
			||||||
 * See LICENSE file for license details.
 | 
					 * See LICENSE file for license details.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
 | 
					 | 
				
			||||||
#define TAGS \
 | 
					#define TAGS \
 | 
				
			||||||
const char *tags[TLast] = { \
 | 
					const char *tags[] = { "0", "1", "2", "3", "4", NULL };
 | 
				
			||||||
	[Tfnord] = "fnord", \
 | 
					 | 
				
			||||||
	[Tdev] = "dev", \
 | 
					 | 
				
			||||||
	[Tnet] = "net", \
 | 
					 | 
				
			||||||
	[Twork] = "work", \
 | 
					 | 
				
			||||||
	[Tmisc] = "misc", \
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEFMODE			dotile /* dofloat */
 | 
					#define DEFMODE			dotile /* dofloat */
 | 
				
			||||||
#define DEFTAG			Tdev
 | 
					#define DEFTAG			1 /* index */
 | 
				
			||||||
#define FONT			"fixed"
 | 
					#define FONT			"fixed"
 | 
				
			||||||
#define BGCOLOR			"#666699"
 | 
					#define BGCOLOR			"#666699"
 | 
				
			||||||
#define FGCOLOR			"#eeeeee"
 | 
					#define FGCOLOR			"#eeeeee"
 | 
				
			||||||
| 
						 | 
					@ -27,11 +20,11 @@ const char *tags[TLast] = { \
 | 
				
			||||||
	const char *term[] = { "xterm", NULL }; \
 | 
						const char *term[] = { "xterm", NULL }; \
 | 
				
			||||||
static Key key[] = { \
 | 
					static Key key[] = { \
 | 
				
			||||||
	/* modifier		key		function	arguments */ \
 | 
						/* modifier		key		function	arguments */ \
 | 
				
			||||||
	{ MODKEY,		XK_0,		view,		{ .i = Tfnord } }, \
 | 
						{ MODKEY,		XK_0,		view,		{ .i = 0 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_1,		view,		{ .i = Tdev } }, \
 | 
						{ MODKEY,		XK_1,		view,		{ .i = 1 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_2,		view,		{ .i = Tnet } }, \
 | 
						{ MODKEY,		XK_2,		view,		{ .i = 2 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_3,		view,		{ .i = Twork } }, \
 | 
						{ MODKEY,		XK_3,		view,		{ .i = 3 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_4,		view,		{ .i = Tmisc} }, \
 | 
						{ MODKEY,		XK_4,		view,		{ .i = 4 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_h,		viewprev,	{ 0 } }, \
 | 
						{ MODKEY,		XK_h,		viewprev,	{ 0 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_j,		focusnext,	{ 0 } }, \
 | 
						{ MODKEY,		XK_j,		focusnext,	{ 0 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_k,		focusprev,	{ 0 } }, \
 | 
						{ MODKEY,		XK_k,		focusprev,	{ 0 } }, \
 | 
				
			||||||
| 
						 | 
					@ -39,24 +32,25 @@ static Key key[] = { \
 | 
				
			||||||
	{ MODKEY,		XK_m,		togglemax,	{ 0 } }, \
 | 
						{ MODKEY,		XK_m,		togglemax,	{ 0 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_space,	togglemode,	{ 0 } }, \
 | 
						{ MODKEY,		XK_space,	togglemode,	{ 0 } }, \
 | 
				
			||||||
	{ MODKEY,		XK_Return,	zoom,		{ 0 } }, \
 | 
						{ MODKEY,		XK_Return,	zoom,		{ 0 } }, \
 | 
				
			||||||
	{ MODKEY|ControlMask,	XK_0,		appendtag,	{ .i = Tfnord } }, \
 | 
						{ MODKEY|ControlMask,	XK_0,		appendtag,	{ .i = 0 } }, \
 | 
				
			||||||
	{ MODKEY|ControlMask,	XK_1,		appendtag,	{ .i = Tdev } }, \
 | 
						{ MODKEY|ControlMask,	XK_1,		appendtag,	{ .i = 1 } }, \
 | 
				
			||||||
	{ MODKEY|ControlMask,	XK_2,		appendtag,	{ .i = Tnet } }, \
 | 
						{ MODKEY|ControlMask,	XK_2,		appendtag,	{ .i = 2 } }, \
 | 
				
			||||||
	{ MODKEY|ControlMask,	XK_3,		appendtag,	{ .i = Twork } }, \
 | 
						{ MODKEY|ControlMask,	XK_3,		appendtag,	{ .i = 3 } }, \
 | 
				
			||||||
	{ MODKEY|ControlMask,	XK_4,		appendtag,	{ .i = Tmisc } }, \
 | 
						{ MODKEY|ControlMask,	XK_4,		appendtag,	{ .i = 4 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_0,		replacetag,	{ .i = Tfnord } }, \
 | 
						{ MODKEY|ShiftMask,	XK_0,		replacetag,	{ .i = 0 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_1,		replacetag,	{ .i = Tdev } }, \
 | 
						{ MODKEY|ShiftMask,	XK_1,		replacetag,	{ .i = 1 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_2,		replacetag,	{ .i = Tnet } }, \
 | 
						{ MODKEY|ShiftMask,	XK_2,		replacetag,	{ .i = 2 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_3,		replacetag,	{ .i = Twork } }, \
 | 
						{ MODKEY|ShiftMask,	XK_3,		replacetag,	{ .i = 3 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_4,		replacetag,	{ .i = Tmisc } }, \
 | 
						{ MODKEY|ShiftMask,	XK_4,		replacetag,	{ .i = 4 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, \
 | 
						{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } }, \
 | 
						{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } }, \
 | 
				
			||||||
	{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .argv = term } }, \
 | 
						{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .argv = term } }, \
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define RULES \
 | 
					#define RULES \
 | 
				
			||||||
 | 
						const unsigned int firefox[] = { 2 }; \
 | 
				
			||||||
static Rule rule[] = { \
 | 
					static Rule rule[] = { \
 | 
				
			||||||
	/* class:instance	tags				isfloat */ \
 | 
						/* class:instance	tags		isfloat */ \
 | 
				
			||||||
	{ "Firefox.*",		{ [Tnet] = True },		False }, \
 | 
						{ "Firefox.*",		firefox,	False }, \
 | 
				
			||||||
	{ "Gimp.*",		{ 0 },				True}, \
 | 
						{ "Gimp.*",		NULL,		True}, \
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								draw.c
								
								
								
								
							
							
						
						
									
										4
									
								
								draw.c
								
								
								
								
							| 
						 | 
					@ -114,7 +114,7 @@ drawstatus()
 | 
				
			||||||
	drawtext(NULL, !istile, False);
 | 
						drawtext(NULL, !istile, False);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dc.w = 0;
 | 
						dc.w = 0;
 | 
				
			||||||
	for(i = 0; i < TLast; i++) {
 | 
						for(i = 0; i < ntags; i++) {
 | 
				
			||||||
		dc.x += dc.w;
 | 
							dc.x += dc.w;
 | 
				
			||||||
		dc.w = textw(tags[i]);
 | 
							dc.w = textw(tags[i]);
 | 
				
			||||||
		if(istile)
 | 
							if(istile)
 | 
				
			||||||
| 
						 | 
					@ -153,7 +153,7 @@ drawtitle(Client *c)
 | 
				
			||||||
	dc.x = dc.y = 0;
 | 
						dc.x = dc.y = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dc.w = 0;
 | 
						dc.w = 0;
 | 
				
			||||||
	for(i = 0; i < TLast; i++) {
 | 
						for(i = 0; i < ntags; i++) {
 | 
				
			||||||
		if(c->tags[i]) {
 | 
							if(c->tags[i]) {
 | 
				
			||||||
			dc.x += dc.w;
 | 
								dc.x += dc.w;
 | 
				
			||||||
			dc.w = textw(tags[i]);
 | 
								dc.w = textw(tags[i]);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										5
									
								
								dwm.h
								
								
								
								
							
							
						
						
									
										5
									
								
								dwm.h
								
								
								
								
							| 
						 | 
					@ -60,16 +60,17 @@ struct Client {
 | 
				
			||||||
	unsigned int border;
 | 
						unsigned int border;
 | 
				
			||||||
	Bool isfloat;
 | 
						Bool isfloat;
 | 
				
			||||||
	Bool ismax;
 | 
						Bool ismax;
 | 
				
			||||||
	Bool tags[TLast];
 | 
						Bool *tags;
 | 
				
			||||||
	Client *next;
 | 
						Client *next;
 | 
				
			||||||
	Client *prev;
 | 
						Client *prev;
 | 
				
			||||||
	Window win;
 | 
						Window win;
 | 
				
			||||||
	Window title;
 | 
						Window title;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern const char *tags[TLast];
 | 
					extern const char *tags[];
 | 
				
			||||||
extern char stext[1024];
 | 
					extern char stext[1024];
 | 
				
			||||||
extern int tsel, screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
 | 
					extern int tsel, screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
 | 
				
			||||||
 | 
					extern unsigned int ntags;
 | 
				
			||||||
extern void (*handler[LASTEvent])(XEvent *);
 | 
					extern void (*handler[LASTEvent])(XEvent *);
 | 
				
			||||||
extern void (*arrange)(Arg *);
 | 
					extern void (*arrange)(Arg *);
 | 
				
			||||||
extern Atom wmatom[WMLast], netatom[NetLast];
 | 
					extern Atom wmatom[WMLast], netatom[NetLast];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								event.c
								
								
								
								
							
							
						
						
									
										2
									
								
								event.c
								
								
								
								
							| 
						 | 
					@ -105,7 +105,7 @@ buttonpress(XEvent *e)
 | 
				
			||||||
		switch(ev->button) {
 | 
							switch(ev->button) {
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			x = 0;
 | 
								x = 0;
 | 
				
			||||||
			for(a.i = 0; a.i < TLast; a.i++) {
 | 
								for(a.i = 0; a.i < ntags; a.i++) {
 | 
				
			||||||
				x += textw(tags[a.i]);
 | 
									x += textw(tags[a.i]);
 | 
				
			||||||
				if(ev->x < x) {
 | 
									if(ev->x < x) {
 | 
				
			||||||
					view(&a);
 | 
										view(&a);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								main.c
								
								
								
								
							
							
						
						
									
										3
									
								
								main.c
								
								
								
								
							| 
						 | 
					@ -85,6 +85,7 @@ xerrorstart(Display *dsply, XErrorEvent *ee)
 | 
				
			||||||
char stext[1024];
 | 
					char stext[1024];
 | 
				
			||||||
int tsel = DEFTAG;
 | 
					int tsel = DEFTAG;
 | 
				
			||||||
int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
 | 
					int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
 | 
				
			||||||
 | 
					unsigned int ntags;
 | 
				
			||||||
Atom wmatom[WMLast], netatom[NetLast];
 | 
					Atom wmatom[WMLast], netatom[NetLast];
 | 
				
			||||||
Bool running = True;
 | 
					Bool running = True;
 | 
				
			||||||
Bool issel = True;
 | 
					Bool issel = True;
 | 
				
			||||||
| 
						 | 
					@ -210,6 +211,8 @@ main(int argc, char *argv[])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	grabkeys();
 | 
						grabkeys();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for(ntags = 0; tags[ntags]; ntags++);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* style */
 | 
						/* style */
 | 
				
			||||||
	dc.bg = getcolor(BGCOLOR);
 | 
						dc.bg = getcolor(BGCOLOR);
 | 
				
			||||||
	dc.fg = getcolor(FGCOLOR);
 | 
						dc.fg = getcolor(FGCOLOR);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										19
									
								
								tag.c
								
								
								
								
							
							
						
						
									
										19
									
								
								tag.c
								
								
								
								
							| 
						 | 
					@ -13,7 +13,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
	const char *pattern;
 | 
						const char *pattern;
 | 
				
			||||||
	Bool tags[TLast];
 | 
						const unsigned int *tags;
 | 
				
			||||||
	Bool isfloat;
 | 
						Bool isfloat;
 | 
				
			||||||
} Rule;
 | 
					} Rule;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -145,7 +145,7 @@ replacetag(Arg *arg)
 | 
				
			||||||
	if(!sel)
 | 
						if(!sel)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(i = 0; i < TLast; i++)
 | 
						for(i = 0; i < ntags; i++)
 | 
				
			||||||
		sel->tags[i] = False;
 | 
							sel->tags[i] = False;
 | 
				
			||||||
	appendtag(arg);
 | 
						appendtag(arg);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -155,7 +155,7 @@ settags(Client *c)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char classinst[256];
 | 
						char classinst[256];
 | 
				
			||||||
	static unsigned int len = sizeof(rule) / sizeof(rule[0]);
 | 
						static unsigned int len = sizeof(rule) / sizeof(rule[0]);
 | 
				
			||||||
	unsigned int i, j;
 | 
						unsigned int i, j, n;
 | 
				
			||||||
	regex_t regex;
 | 
						regex_t regex;
 | 
				
			||||||
	regmatch_t tmp;
 | 
						regmatch_t tmp;
 | 
				
			||||||
	Bool matched = False;
 | 
						Bool matched = False;
 | 
				
			||||||
| 
						 | 
					@ -168,10 +168,11 @@ settags(Client *c)
 | 
				
			||||||
		for(i = 0; !matched && i < len; i++) {
 | 
							for(i = 0; !matched && i < len; i++) {
 | 
				
			||||||
			if(!regcomp(®ex, rule[i].pattern, 0)) {
 | 
								if(!regcomp(®ex, rule[i].pattern, 0)) {
 | 
				
			||||||
				if(!regexec(®ex, classinst, 1, &tmp, 0)) {
 | 
									if(!regexec(®ex, classinst, 1, &tmp, 0)) {
 | 
				
			||||||
					for(j = 0; j < TLast; j++) {
 | 
										n = rule[i].tags ?
 | 
				
			||||||
						if((c->tags[j] = rule[i].tags[j]))
 | 
											sizeof(rule[i].tags) / sizeof(rule[i].tags[0]) : 0;
 | 
				
			||||||
							matched = True;
 | 
										matched = n != 0;
 | 
				
			||||||
					}
 | 
										for(j = 0; j < n; j++)
 | 
				
			||||||
 | 
											c->tags[rule[i].tags[j]] = True;
 | 
				
			||||||
					c->isfloat = rule[i].isfloat;
 | 
										c->isfloat = rule[i].isfloat;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				regfree(®ex);
 | 
									regfree(®ex);
 | 
				
			||||||
| 
						 | 
					@ -204,13 +205,13 @@ view(Arg *arg)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
viewnext(Arg *arg)
 | 
					viewnext(Arg *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	arg->i = (tsel < TLast-1) ? tsel+1 : 0;
 | 
						arg->i = (tsel < ntags-1) ? tsel+1 : 0;
 | 
				
			||||||
	view(arg);
 | 
						view(arg);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
viewprev(Arg *arg)
 | 
					viewprev(Arg *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	arg->i = (tsel > 0) ? tsel-1 : TLast-1;
 | 
						arg->i = (tsel > 0) ? tsel-1 : ntags-1;
 | 
				
			||||||
	view(arg);
 | 
						view(arg);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue