dwm-cfacts-6.2.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-cfacts-6.2.diff (2999B)
       ---
            1 diff -uraN a/config.def.h b/config.def.h
            2 --- a/config.def.h        2019-02-02 15:55:28.000000000 +0300
            3 +++ b/config.def.h        2020-02-18 03:33:58.212113667 +0300
            4 @@ -70,6 +70,9 @@
            5          { MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
            6          { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
            7          { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
            8 +        { MODKEY|ShiftMask,             XK_h,      setcfact,       {.f = +0.25} },
            9 +        { MODKEY|ShiftMask,             XK_l,      setcfact,       {.f = -0.25} },
           10 +        { MODKEY|ShiftMask,             XK_o,      setcfact,       {.f =  0.00} },
           11          { MODKEY,                       XK_Return, zoom,           {0} },
           12          { MODKEY,                       XK_Tab,    view,           {0} },
           13          { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
           14 diff -uraN a/dwm.c b/dwm.c
           15 --- a/dwm.c        2019-02-02 15:55:28.000000000 +0300
           16 +++ b/dwm.c        2020-02-18 03:33:58.213447007 +0300
           17 @@ -87,6 +87,7 @@
           18  struct Client {
           19          char name[256];
           20          float mina, maxa;
           21 +        float cfact;
           22          int x, y, w, h;
           23          int oldx, oldy, oldw, oldh;
           24          int basew, baseh, incw, inch, maxw, maxh, minw, minh;
           25 @@ -200,6 +201,7 @@
           26  static void setfocus(Client *c);
           27  static void setfullscreen(Client *c, int fullscreen);
           28  static void setlayout(const Arg *arg);
           29 +static void setcfact(const Arg *arg);
           30  static void setmfact(const Arg *arg);
           31  static void setup(void);
           32  static void seturgent(Client *c, int urg);
           33 @@ -1029,6 +1031,7 @@
           34          c->w = c->oldw = wa->width;
           35          c->h = c->oldh = wa->height;
           36          c->oldbw = wa->border_width;
           37 +        c->cfact = 1.0;
           38  
           39          updatetitle(c);
           40          if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
           41 @@ -1511,6 +1514,23 @@
           42                  drawbar(selmon);
           43  }
           44  
           45 +void setcfact(const Arg *arg) {
           46 +        float f;
           47 +        Client *c;
           48 +
           49 +        c = selmon->sel;
           50 +
           51 +        if(!arg || !c || !selmon->lt[selmon->sellt]->arrange)
           52 +                return;
           53 +        f = arg->f + c->cfact;
           54 +        if(arg->f == 0.0)
           55 +                f = 1.0;
           56 +        else if(f < 0.25 || f > 4.0)
           57 +                return;
           58 +        c->cfact = f;
           59 +        arrange(selmon);
           60 +}
           61 +
           62  /* arg > 1.0 will set mfact absolutely */
           63  void
           64  setmfact(const Arg *arg)
           65 @@ -1674,9 +1694,15 @@
           66  tile(Monitor *m)
           67  {
           68          unsigned int i, n, h, mw, my, ty;
           69 +        float mfacts = 0, sfacts = 0;
           70          Client *c;
           71  
           72 -        for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
           73 +        for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) {
           74 +                if (n < m->nmaster)
           75 +                        mfacts += c->cfact;
           76 +                else
           77 +                        sfacts += c->cfact;
           78 +        }
           79          if (n == 0)
           80                  return;
           81  
           82 @@ -1686,13 +1712,15 @@
           83                  mw = m->ww;
           84          for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
           85                  if (i < m->nmaster) {
           86 -                        h = (m->wh - my) / (MIN(n, m->nmaster) - i);
           87 +                        h = (m->wh - my) * (c->cfact / mfacts);
           88                          resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
           89                          my += HEIGHT(c);
           90 +                        mfacts -= c->cfact;
           91                  } else {
           92                          h = (m->wh - ty) / (n - i);
           93                          resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
           94                          ty += HEIGHT(c);
           95 +                        sfacts -= c->cfact;
           96                  }
           97  }
           98