implemented viewextend and added M-S-C-n shortcuts for extending the current view... updated man page (works great!) nice feature 292ccc4c
Anselm R.Garbe · 2006-08-11 19:26 8 file(s) · +100 −68
config.arg.h +24 −21
18 18
19 19
#define KEYS \
20 20
static Key key[] = { \
21 -
	/* modifier		key		function	arguments */ \
22 -
	{ MODKEY,		XK_1,		view,		{ .i = 0 } }, \
23 -
	{ MODKEY,		XK_2,		view,		{ .i = 1 } }, \
24 -
	{ MODKEY,		XK_3,		view,		{ .i = 2 } }, \
25 -
	{ MODKEY,		XK_h,		viewprev,	{ 0 } }, \
26 -
	{ MODKEY,		XK_j,		focusnext,	{ 0 } }, \
27 -
	{ MODKEY,		XK_k,		focusprev,	{ 0 } }, \
28 -
	{ MODKEY,		XK_l,		viewnext,	{ 0 } }, \
29 -
	{ MODKEY,		XK_m,		togglemax,	{ 0 } }, \
30 -
	{ MODKEY,		XK_p,		spawn, \
21 +
	/* modifier			key		function	arguments */ \
22 +
	{ MODKEY,			XK_1,		view,		{ .i = 0 } }, \
23 +
	{ MODKEY,			XK_2,		view,		{ .i = 1 } }, \
24 +
	{ MODKEY,			XK_3,		view,		{ .i = 2 } }, \
25 +
	{ MODKEY,			XK_h,		viewprev,	{ 0 } }, \
26 +
	{ MODKEY,			XK_j,		focusnext,	{ 0 } }, \
27 +
	{ MODKEY,			XK_k,		focusprev,	{ 0 } }, \
28 +
	{ MODKEY,			XK_l,		viewnext,	{ 0 } }, \
29 +
	{ MODKEY,			XK_m,		togglemax,	{ 0 } }, \
30 +
	{ MODKEY,			XK_p,		spawn, \
31 31
		{ .cmd = "exec `ls -lL /usr/bin /usr/local/bin 2>/dev/null | " \
32 32
			"awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`" } }, \
33 -
	{ MODKEY,		XK_space,	togglemode,	{ 0 } }, \
34 -
	{ MODKEY,		XK_Return,	zoom,		{ 0 } }, \
35 -
	{ MODKEY|ControlMask,	XK_1,		appendtag,	{ .i = 0 } }, \
36 -
	{ MODKEY|ControlMask,	XK_2,		appendtag,	{ .i = 1 } }, \
37 -
	{ MODKEY|ControlMask,	XK_3,		appendtag,	{ .i = 2 } }, \
38 -
	{ MODKEY|ShiftMask,	XK_1,		replacetag,	{ .i = 0 } }, \
39 -
	{ MODKEY|ShiftMask,	XK_2,		replacetag,	{ .i = 1 } }, \
40 -
	{ MODKEY|ShiftMask,	XK_3,		replacetag,	{ .i = 2 } }, \
41 -
	{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, \
42 -
	{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } }, \
43 -
	{ MODKEY|ShiftMask,	XK_Return,	spawn, \
33 +
	{ MODKEY,			XK_space,	togglemode,	{ 0 } }, \
34 +
	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \
35 +
	{ MODKEY|ControlMask,		XK_1,		appendtag,	{ .i = 0 } }, \
36 +
	{ MODKEY|ControlMask,		XK_2,		appendtag,	{ .i = 1 } }, \
37 +
	{ MODKEY|ControlMask,		XK_3,		appendtag,	{ .i = 2 } }, \
38 +
	{ MODKEY|ShiftMask,		XK_1,		replacetag,	{ .i = 0 } }, \
39 +
	{ MODKEY|ShiftMask,		XK_2,		replacetag,	{ .i = 1 } }, \
40 +
	{ MODKEY|ShiftMask,		XK_3,		replacetag,	{ .i = 2 } }, \
41 +
	{ MODKEY|ShiftMask,		XK_c,		killclient,	{ 0 } }, \
42 +
	{ MODKEY|ShiftMask,		XK_q,		quit,		{ 0 } }, \
43 +
	{ MODKEY|ShiftMask,		XK_Return,	spawn, \
44 44
		{ .cmd = "exec urxvt +sb -tr -bg black -fg '#eeeeee' -cr '#eeeeee' +sb " \
45 45
			"-fn '-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*'" } }, \
46 +
	{ MODKEY|ControlMask|ShiftMask,	XK_1,		viewextend,	{ .i = 0 } }, \
47 +
	{ MODKEY|ShiftMask,		XK_2,		viewextend,	{ .i = 1 } }, \
48 +
	{ MODKEY|ShiftMask,		XK_3,		viewextend,	{ .i = 2 } }, \
46 49
};
47 50
48 51
#define RULES \
config.default.h +31 −26
18 18
19 19
#define KEYS \
20 20
static Key key[] = { \
21 -
	/* modifier		key		function	arguments */ \
22 -
	{ MODKEY,		XK_0,		view,		{ .i = 0 } }, \
23 -
	{ MODKEY,		XK_1,		view,		{ .i = 1 } }, \
24 -
	{ MODKEY,		XK_2,		view,		{ .i = 2 } }, \
25 -
	{ MODKEY,		XK_3,		view,		{ .i = 3 } }, \
26 -
	{ MODKEY,		XK_4,		view,		{ .i = 4 } }, \
27 -
	{ MODKEY,		XK_h,		viewprev,	{ 0 } }, \
28 -
	{ MODKEY,		XK_j,		focusnext,	{ 0 } }, \
29 -
	{ MODKEY,		XK_k,		focusprev,	{ 0 } }, \
30 -
	{ MODKEY,		XK_l,		viewnext,	{ 0 } }, \
31 -
	{ MODKEY,		XK_m,		togglemax,	{ 0 } }, \
32 -
	{ MODKEY,		XK_space,	togglemode,	{ 0 } }, \
33 -
	{ MODKEY,		XK_Return,	zoom,		{ 0 } }, \
34 -
	{ MODKEY|ControlMask,	XK_0,		appendtag,	{ .i = 0 } }, \
35 -
	{ MODKEY|ControlMask,	XK_1,		appendtag,	{ .i = 1 } }, \
36 -
	{ MODKEY|ControlMask,	XK_2,		appendtag,	{ .i = 2 } }, \
37 -
	{ MODKEY|ControlMask,	XK_3,		appendtag,	{ .i = 3 } }, \
38 -
	{ MODKEY|ControlMask,	XK_4,		appendtag,	{ .i = 4 } }, \
39 -
	{ MODKEY|ShiftMask,	XK_0,		replacetag,	{ .i = 0 } }, \
40 -
	{ MODKEY|ShiftMask,	XK_1,		replacetag,	{ .i = 1 } }, \
41 -
	{ MODKEY|ShiftMask,	XK_2,		replacetag,	{ .i = 2 } }, \
42 -
	{ MODKEY|ShiftMask,	XK_3,		replacetag,	{ .i = 3 } }, \
43 -
	{ MODKEY|ShiftMask,	XK_4,		replacetag,	{ .i = 4 } }, \
44 -
	{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, \
45 -
	{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } }, \
46 -
	{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .cmd = "exec xterm" } }, \
21 +
	/* modifier			key		function	arguments */ \
22 +
	{ MODKEY,			XK_0,		view,		{ .i = 0 } }, \
23 +
	{ MODKEY,			XK_1,		view,		{ .i = 1 } }, \
24 +
	{ MODKEY,			XK_2,		view,		{ .i = 2 } }, \
25 +
	{ MODKEY,			XK_3,		view,		{ .i = 3 } }, \
26 +
	{ MODKEY,			XK_4,		view,		{ .i = 4 } }, \
27 +
	{ MODKEY,			XK_h,		viewprev,	{ 0 } }, \
28 +
	{ MODKEY,			XK_j,		focusnext,	{ 0 } }, \
29 +
	{ MODKEY,			XK_k,		focusprev,	{ 0 } }, \
30 +
	{ MODKEY,			XK_l,		viewnext,	{ 0 } }, \
31 +
	{ MODKEY,			XK_m,		togglemax,	{ 0 } }, \
32 +
	{ MODKEY,			XK_space,	togglemode,	{ 0 } }, \
33 +
	{ MODKEY,			XK_Return,	zoom,		{ 0 } }, \
34 +
	{ MODKEY|ControlMask,		XK_0,		appendtag,	{ .i = 0 } }, \
35 +
	{ MODKEY|ControlMask,		XK_1,		appendtag,	{ .i = 1 } }, \
36 +
	{ MODKEY|ControlMask,		XK_2,		appendtag,	{ .i = 2 } }, \
37 +
	{ MODKEY|ControlMask,		XK_3,		appendtag,	{ .i = 3 } }, \
38 +
	{ MODKEY|ControlMask,		XK_4,		appendtag,	{ .i = 4 } }, \
39 +
	{ MODKEY|ShiftMask,		XK_0,		replacetag,	{ .i = 0 } }, \
40 +
	{ MODKEY|ShiftMask,		XK_1,		replacetag,	{ .i = 1 } }, \
41 +
	{ MODKEY|ShiftMask,		XK_2,		replacetag,	{ .i = 2 } }, \
42 +
	{ MODKEY|ShiftMask,		XK_3,		replacetag,	{ .i = 3 } }, \
43 +
	{ MODKEY|ShiftMask,		XK_4,		replacetag,	{ .i = 4 } }, \
44 +
	{ MODKEY|ShiftMask,		XK_c,		killclient,	{ 0 } }, \
45 +
	{ MODKEY|ShiftMask,		XK_q,		quit,		{ 0 } }, \
46 +
	{ MODKEY|ShiftMask,		XK_Return,	spawn,		{ .cmd = "exec xterm" } }, \
47 +
	{ MODKEY|ControlMask|ShiftMask,	XK_0,		viewextend,	{ .i = 0 } }, \
48 +
	{ MODKEY|ControlMask|ShiftMask,	XK_1,		viewextend,	{ .i = 1 } }, \
49 +
	{ MODKEY|ControlMask|ShiftMask,	XK_2,		viewextend,	{ .i = 2 } }, \
50 +
	{ MODKEY|ControlMask|ShiftMask,	XK_3,		viewextend,	{ .i = 3 } }, \
51 +
	{ MODKEY|ControlMask|ShiftMask,	XK_4,		viewextend,	{ .i = 4 } }, \
47 52
};
48 53
49 54
#define RULES \
draw.c +2 −2
109 109
		dc.x += dc.w;
110 110
		dc.w = textw(tags[i]);
111 111
		if(istile)
112 -
			drawtext(tags[i], tsel[i]);
112 +
			drawtext(tags[i], seltag[i]);
113 113
		else
114 -
			drawtext(tags[i], !tsel[i]);
114 +
			drawtext(tags[i], !seltag[i]);
115 115
	}
116 116
	x = dc.x + dc.w;
117 117
	dc.w = textw(stext);
dwm.1 +17 −4
36 36
.B Standard input
37 37
is read and displayed in the status text area.
38 38
.TP
39 -
.B Button[1-3]
40 -
click on a tag label focuses that tag.
39 +
.B Button[1,3]
40 +
click on a tag label focuses that
41 +
.B tag.
42 +
.TP
43 +
.B Button2
44 +
click on a tag label (un)extends the current
45 +
.B tag.
41 46
.TP
42 47
.B Button[1,4]
43 -
click on the bar focuses the previous tag.
48 +
click on the bar focuses the previous
49 +
.B tag.
44 50
.TP
45 51
.B Button[2,5]
46 -
click on the bar focuses the next tag.
52 +
click on the bar focuses the next
53 +
.B tag.
47 54
.SS Keyboard commands
48 55
.TP
49 56
.B Mod1-Return
108 115
.B nth tag
109 116
to current
110 117
.B window.
118 +
.TP
119 +
.B Mod1-Control-Shift-[0..n]
120 +
(Un)extends
121 +
.B nth tag
122 +
with current
123 +
.B tag.
111 124
.SS Mouse commands
112 125
.TP
113 126
.B Mod1-Button1
dwm.h +2 −1
74 74
extern void (*handler[LASTEvent])(XEvent *);
75 75
extern void (*arrange)(Arg *);
76 76
extern Atom wmatom[WMLast], netatom[NetLast];
77 -
extern Bool running, issel, *tsel;
77 +
extern Bool running, issel, *seltag;
78 78
extern Client *clients, *sel;
79 79
extern Cursor cursor[CurLast];
80 80
extern DC dc;
128 128
extern void settags(Client *c);
129 129
extern void togglemode(Arg *arg);
130 130
extern void view(Arg *arg);
131 +
extern void viewextend(Arg *arg);
131 132
extern void viewnext(Arg *arg);
132 133
extern void viewprev(Arg *arg);
133 134
event.c +2 −5
108 108
			for(a.i = 0; a.i < ntags; a.i++) {
109 109
				x += textw(tags[a.i]);
110 110
				if(ev->x < x) {
111 -
					if(ev->button == Button3) {
112 -
						tsel[a.i] = True;
113 -
						arrange(NULL);
114 -
						drawall();
115 -
					}
111 +
					if(ev->button == Button3)
112 +
						viewextend(&a);
116 113
					else
117 114
						view(&a);
118 115
					return;
main.c +3 −3
83 83
/* extern */
84 84
85 85
char stext[1024];
86 -
Bool *tsel;
86 +
Bool *seltag;
87 87
int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
88 88
unsigned int ntags;
89 89
Atom wmatom[WMLast], netatom[NetLast];
213 213
	initrregs();
214 214
215 215
	for(ntags = 0; tags[ntags]; ntags++);
216 -
	tsel = emallocz(sizeof(Bool) * ntags);
217 -
	tsel[DEFTAG] = True;
216 +
	seltag = emallocz(sizeof(Bool) * ntags);
217 +
	seltag[DEFTAG] = True;
218 218
219 219
	/* style */
220 220
	dc.bg = getcolor(BGCOLOR);
tag.c +19 −6
181 181
	unsigned int i;
182 182
183 183
	for(i = 0; i < ntags; i++)
184 -
		if(c->tags[i] && tsel[i])
184 +
		if(c->tags[i] && seltag[i])
185 185
			return True;
186 186
	return False;
187 187
}
229 229
	}
230 230
	if(!matched)
231 231
		for(i = 0; i < ntags; i++)
232 -
			c->tags[i] = tsel[i];
232 +
			c->tags[i] = seltag[i];
233 233
}
234 234
235 235
void
245 245
	unsigned int i;
246 246
247 247
	for(i = 0; i < ntags; i++)
248 -
		tsel[i] = False;
249 -
	tsel[arg->i] = True;
248 +
		seltag[i] = False;
249 +
	seltag[arg->i] = True;
250 +
	arrange(NULL);
251 +
	drawall();
252 +
}
253 +
254 +
void
255 +
viewextend(Arg *arg)
256 +
{
257 +
	unsigned int i;
258 +
259 +
	seltag[arg->i] = !seltag[arg->i];
260 +
	for(i = 0; !seltag[i] && i < ntags; i++);
261 +
	if(i == ntags)
262 +
		seltag[arg->i] = True; /* cannot toggle last view */
250 263
	arrange(NULL);
251 264
	drawall();
252 265
}
256 269
{
257 270
	unsigned int i;
258 271
259 -
	for(i = 0; !tsel[i]; i++);
272 +
	for(i = 0; !seltag[i]; i++);
260 273
	arg->i = (i < ntags-1) ? i+1 : 0;
261 274
	view(arg);
262 275
}
266 279
{
267 280
	unsigned int i;
268 281
269 -
	for(i = 0; !tsel[i]; i++);
282 +
	for(i = 0; !seltag[i]; i++);
270 283
	arg->i = (i > 0) ? i-1 : ntags-1;
271 284
	view(arg);
272 285
}