| dwm-cfacts-6.1.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| dwm-cfacts-6.1.diff (3142B) | |
| --- | |
| 1 diff --git a/config.def.h b/config.def.h | |
| 2 index 7054c06..9878dbf 100644 | |
| 3 --- a/config.def.h | |
| 4 +++ b/config.def.h | |
| 5 @@ -68,6 +68,9 @@ static Key keys[] = { | |
| 6 { MODKEY, XK_d, incnmaster, {.i … | |
| 7 { MODKEY, XK_h, setmfact, {.f … | |
| 8 { MODKEY, XK_l, setmfact, {.f … | |
| 9 + { MODKEY|ShiftMask, XK_h, setcfact, {.f … | |
| 10 + { MODKEY|ShiftMask, XK_l, setcfact, {.f … | |
| 11 + { MODKEY|ShiftMask, XK_o, setcfact, {.f … | |
| 12 { MODKEY, XK_Return, zoom, {0} … | |
| 13 { MODKEY, XK_Tab, view, {0} … | |
| 14 { MODKEY|ShiftMask, XK_c, killclient, {0} … | |
| 15 diff --git a/dwm.c b/dwm.c | |
| 16 index 0362114..881afe6 100644 | |
| 17 --- a/dwm.c | |
| 18 +++ b/dwm.c | |
| 19 @@ -87,6 +87,7 @@ typedef struct Client Client; | |
| 20 struct Client { | |
| 21 char name[256]; | |
| 22 float mina, maxa; | |
| 23 + float cfact; | |
| 24 int x, y, w, h; | |
| 25 int oldx, oldy, oldw, oldh; | |
| 26 int basew, baseh, incw, inch, maxw, maxh, minw, minh; | |
| 27 @@ -201,6 +202,7 @@ static void setclientstate(Client *c, long state); | |
| 28 static void setfocus(Client *c); | |
| 29 static void setfullscreen(Client *c, int fullscreen); | |
| 30 static void setlayout(const Arg *arg); | |
| 31 +static void setcfact(const Arg *arg); | |
| 32 static void setmfact(const Arg *arg); | |
| 33 static void setup(void); | |
| 34 static void showhide(Client *c); | |
| 35 @@ -1052,6 +1054,7 @@ manage(Window w, XWindowAttributes *wa) | |
| 36 c->w = c->oldw = wa->width; | |
| 37 c->h = c->oldh = wa->height; | |
| 38 c->oldbw = wa->border_width; | |
| 39 + c->cfact = 1.0; | |
| 40 | |
| 41 if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw) | |
| 42 c->x = c->mon->mx + c->mon->mw - WIDTH(c); | |
| 43 @@ -1528,6 +1531,23 @@ setlayout(const Arg *arg) | |
| 44 drawbar(selmon); | |
| 45 } | |
| 46 | |
| 47 +void setcfact(const Arg *arg) { | |
| 48 + float f; | |
| 49 + Client *c; | |
| 50 + | |
| 51 + c = selmon->sel; | |
| 52 + | |
| 53 + if(!arg || !c || !selmon->lt[selmon->sellt]->arrange) | |
| 54 + return; | |
| 55 + f = arg->f + c->cfact; | |
| 56 + if(arg->f == 0.0) | |
| 57 + f = 1.0; | |
| 58 + else if(f < 0.25 || f > 4.0) | |
| 59 + return; | |
| 60 + c->cfact = f; | |
| 61 + arrange(selmon); | |
| 62 +} | |
| 63 + | |
| 64 /* arg > 1.0 will set mfact absolutly */ | |
| 65 void | |
| 66 setmfact(const Arg *arg) | |
| 67 @@ -1667,9 +1687,15 @@ void | |
| 68 tile(Monitor *m) | |
| 69 { | |
| 70 unsigned int i, n, h, mw, my, ty; | |
| 71 + float mfacts = 0, sfacts = 0; | |
| 72 Client *c; | |
| 73 | |
| 74 - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next… | |
| 75 + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next… | |
| 76 + if (n < m->nmaster) | |
| 77 + mfacts += c->cfact; | |
| 78 + else | |
| 79 + sfacts += c->cfact; | |
| 80 + } | |
| 81 if (n == 0) | |
| 82 return; | |
| 83 | |
| 84 @@ -1679,13 +1705,15 @@ tile(Monitor *m) | |
| 85 mw = m->ww; | |
| 86 for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttil… | |
| 87 if (i < m->nmaster) { | |
| 88 - h = (m->wh - my) / (MIN(n, m->nmaster) - i); | |
| 89 + h = (m->wh - my) * (c->cfact / mfacts); | |
| 90 resize(c, m->wx, m->wy + my, mw - (2*c->bw), h … | |
| 91 my += HEIGHT(c); | |
| 92 + mfacts -= c->cfact; | |
| 93 } else { | |
| 94 - h = (m->wh - ty) / (n - i); | |
| 95 + h = (m->wh - ty) * (c->cfact / sfacts); | |
| 96 resize(c, m->wx + mw, m->wy + ty, m->ww - mw - … | |
| 97 ty += HEIGHT(c); | |
| 98 + sfacts -= c->cfact; | |
| 99 } | |
| 100 } | |
| 101 |