setlayout and setgeom are now togglable again
20cd3360
3 file(s) · +38 −42
| 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] }, |
|
| 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. |
| 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) |
|