setlayout and setgeom are now togglable again 20cd3360
Anselm R Garbe · 2008-03-24 13:49 3 file(s) · +38 −42
config.def.h +6 −14
22 22
/*   func name  bx  by  bw  wx  wy  ww     wh  mx  my       mw  mh     tx  ty     tw  th  mox moy mow moh */
23 23
DEFGEOM(single,  0,  0, sw,  0, bh, sw, sh-bh, wx, wy, 0.55*sw, wh, mx+mw, wy, ww-mw, wh,  wx, wy, ww, wh)
24 24
DEFGEOM(dual,    0,  0,1280, 0, bh, ww, wh-bh, wx, wy, 1280,800-bh,  1280,  0, ww-mw, sh,  mx, my, mw, mh)
25 -
/* DEFGEOM(growmaster, bx, by, bw, wx, wy, ww, wh, mx, my, mw+20, mh, mx+mw, ty, tw-20, th, mox, moy, mow, moh) */
26 -
/* DEFGEOM(shrinkmaster, bx, by, bw, wx, wy, ww, wh, mx, my, mw-20, mh, mx+mw, ty, tw+20, th, mox, moy, mow, moh) */
27 25
28 26
Geom geoms[] = {
29 27
	/* symbol	function */
30 -
	{ "<>",		single },	/* first entry is default */
31 -
	{ ")(",		dual },
32 -
/*	{ "+|",		growmaster },*/
33 -
/*	{ "|-",		shrinkmaster },*/
28 +
	{ "[]",		single },	/* first entry is default */
29 +
	{ "[][]",	dual },
34 30
};
35 31
36 32
/* layout(s) */
49 45
#define MODKEY			Mod1Mask
50 46
Key keys[] = {
51 47
	/* modifier			key		function	argument */
52 -
	{ MODKEY,			XK_a,		setgeom,	")(" },
53 -
	{ MODKEY,			XK_d,		setgeom,	"<>" },
54 48
	{ MODKEY,			XK_p,		spawn,
55 49
		"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" },
56 -
	{ MODKEY|ShiftMask,		XK_Return,	spawn, "exec uxterm" },
50 +
	{ MODKEY|ShiftMask,		XK_Return,	spawn,		"exec uxterm" },
57 51
	{ MODKEY,			XK_j,		focusnext,	NULL },
58 52
	{ MODKEY,			XK_k,		focusprev,	NULL },
59 53
	{ MODKEY,			XK_r,		reapply,	NULL },
60 54
	{ MODKEY,			XK_Return,	zoom,		NULL },
61 55
	{ MODKEY,			XK_Tab,		viewprevtag,	NULL },
62 -
	{ MODKEY,			XK_m,		setlayout,	"[M]" },
63 -
	{ MODKEY,			XK_f,		setlayout,	"><>" },
64 -
	{ MODKEY,			XK_v,		setlayout,	"[]=" },
65 -
	{ MODKEY,			XK_h,		setlayout,	"[]|" },
56 +
	{ MODKEY|ShiftMask,		XK_c,		killclient,	NULL },
57 +
	{ MODKEY,			XK_space,	setlayout,	NULL },
66 58
	{ MODKEY|ShiftMask,		XK_space,	togglefloating,	NULL },
67 -
	{ MODKEY|ShiftMask,		XK_c,		killclient,	NULL },
59 +
	{ MODKEY|ControlMask,		XK_space,	setgeom,	NULL },
68 60
	{ MODKEY,			XK_0,		view,		NULL },
69 61
	{ MODKEY,			XK_1,		view,		tags[0] },
70 62
	{ MODKEY,			XK_2,		view,		tags[1] },
dwm.1 +4 −10
57 57
Start
58 58
.BR xterm.
59 59
.TP
60 -
.B Mod1\-f
61 -
Applies floating layout.
62 -
.TP
63 -
.B Mod1\-m
64 -
Applies monocle layout.
65 -
.TP
66 -
.B Mod1\-v
67 -
Applies vertical tiled layout.
60 +
.B Mod1\-space
61 +
Toggles between layouts.
68 62
.TP
69 -
.B Mod1\-h
70 -
Applies horizontal tiled layout.
63 +
.B Mod1\-Control\-space
64 +
Toggles between geometries.
71 65
.TP
72 66
.B Mod1\-j
73 67
Focus next window.
dwm.c +28 −18
322 322
	XButtonPressedEvent *ev = &e->xbutton;
323 323
324 324
	if(ev->window == barwin) {
325 +
		if((ev->x < bgw) && ev->button == Button1) {
326 +
			setgeom(NULL);
327 +
			return;
328 +
		}
325 329
		x = bgw;
326 330
		for(i = 0; i < LENGTH(tags); i++) {
327 331
			x += textw(tags[i]);
341 345
				return;
342 346
			}
343 347
		}
348 +
		if((ev->x < x + blw) && ev->button == Button1) 
349 +
			setlayout(NULL);
344 350
	}
345 351
	else if((c = getclient(ev->window))) {
346 352
		focus(c);
426 432
	if(ev->window == root && (ev->width != sw || ev->height != sh)) {
427 433
		sw = ev->width;
428 434
		sh = ev->height;
429 -
		setgeom(NULL);
435 +
		setgeom(geom->symbol);
430 436
	}
431 437
}
432 438
1417 1423
setgeom(const char *arg) {
1418 1424
	unsigned int i;
1419 1425
1420 -
	for(i = 0; arg && i < LENGTH(geoms); i++)
1421 -
		if(!strcmp(geoms[i].symbol, arg))
1422 -
			break;
1423 -
	if(i == LENGTH(geoms))
1424 -
		return;
1425 -
	geom = &geoms[i];
1426 +
	if(!arg) {
1427 +
		if(++geom == &geoms[LENGTH(geoms)])
1428 +
			geom = &geoms[0];
1429 +
	}
1430 +
	else {
1431 +
		for(i = 0; i < LENGTH(geoms); i++)
1432 +
			if(!strcmp(geoms[i].symbol, arg))
1433 +
				break;
1434 +
		if(i == LENGTH(geoms))
1435 +
			return;
1436 +
		geom = &geoms[i];
1437 +
	}
1426 1438
	geom->apply();
1427 1439
	updatebarpos();
1428 1440
	arrange();
1430 1442
1431 1443
void
1432 1444
setlayout(const char *arg) {
1433 -
	static Layout *revert = 0;
1434 1445
	unsigned int i;
1435 1446
1436 -
	if(!arg)
1437 -
		return;
1438 -
	for(i = 0; i < LENGTH(layouts); i++)
1439 -
		if(!strcmp(arg, layouts[i].symbol))
1440 -
			break;
1441 -
	if(i == LENGTH(layouts))
1442 -
		return;
1443 -
	if(revert && &layouts[i] == lt)
1444 -
		lt = revert;
1447 +
	if(!arg) {
1448 +
		if(++lt == &layouts[LENGTH(layouts)])
1449 +
			lt = &layouts[0];
1450 +
	}
1445 1451
	else {
1446 -
		revert = lt;
1452 +
		for(i = 0; i < LENGTH(layouts); i++)
1453 +
			if(!strcmp(arg, layouts[i].symbol))
1454 +
				break;
1455 +
		if(i == LENGTH(layouts))
1456 +
			return;
1447 1457
		lt = &layouts[i];
1448 1458
	}
1449 1459
	if(sel)