dwm-fullgaps-toggle-20200830.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-fullgaps-toggle-20200830.diff (4965B)
       ---
            1 diff --git a/config.def.h b/config.def.h
            2 index 1c0b587..b172f63 100644
            3 --- a/config.def.h
            4 +++ b/config.def.h
            5 @@ -2,6 +2,7 @@
            6  
            7  /* appearance */
            8  static const unsigned int borderpx  = 1;        /* border pixel of windows */
            9 +static const Gap default_gap        = {.isgap = 1, .realgap = 10, .gappx = 10};
           10  static const unsigned int snap      = 32;       /* snap pixel */
           11  static const int showbar            = 1;        /* 0 means no bar */
           12  static const int topbar             = 1;        /* 0 means bottom bar */
           13 @@ -84,6 +85,10 @@ static Key keys[] = {
           14          { MODKEY,                       XK_period, focusmon,       {.i = +1 } },
           15          { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
           16          { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
           17 +        { MODKEY,                       XK_minus,  setgaps,        {.i = -5 } },
           18 +        { MODKEY,                       XK_equal,  setgaps,        {.i = +5 } },
           19 +        { MODKEY|ShiftMask,             XK_minus,  setgaps,        {.i = GAP_RESET } },
           20 +        { MODKEY|ShiftMask,             XK_equal,  setgaps,        {.i = GAP_TOGGLE} },
           21          TAGKEYS(                        XK_1,                      0)
           22          TAGKEYS(                        XK_2,                      1)
           23          TAGKEYS(                        XK_3,                      2)
           24 diff --git a/dwm.c b/dwm.c
           25 index 664c527..25bc9b7 100644
           26 --- a/dwm.c
           27 +++ b/dwm.c
           28 @@ -57,6 +57,9 @@
           29  #define TAGMASK                 ((1 << LENGTH(tags)) - 1)
           30  #define TEXTW(X)                (drw_fontset_getwidth(drw, (X)) + lrpad)
           31  
           32 +#define GAP_TOGGLE 100
           33 +#define GAP_RESET  0
           34 +
           35  /* enums */
           36  enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
           37  enum { SchemeNorm, SchemeSel }; /* color schemes */
           38 @@ -111,6 +114,12 @@ typedef struct {
           39          void (*arrange)(Monitor *);
           40  } Layout;
           41  
           42 +typedef struct {
           43 +        int isgap;
           44 +        int realgap;
           45 +        int gappx;
           46 +} Gap;
           47 +
           48  struct Monitor {
           49          char ltsymbol[16];
           50          float mfact;
           51 @@ -119,6 +128,7 @@ struct Monitor {
           52          int by;               /* bar geometry */
           53          int mx, my, mw, mh;   /* screen size */
           54          int wx, wy, ww, wh;   /* window area  */
           55 +        Gap *gap;
           56          unsigned int seltags;
           57          unsigned int sellt;
           58          unsigned int tagset[2];
           59 @@ -169,6 +179,7 @@ static void focus(Client *c);
           60  static void focusin(XEvent *e);
           61  static void focusmon(const Arg *arg);
           62  static void focusstack(const Arg *arg);
           63 +static void gap_copy(Gap *to, const Gap *from);
           64  static Atom getatomprop(Client *c, Atom prop);
           65  static int getrootptr(int *x, int *y);
           66  static long getstate(Window w);
           67 @@ -200,6 +211,7 @@ static void sendmon(Client *c, Monitor *m);
           68  static void setclientstate(Client *c, long state);
           69  static void setfocus(Client *c);
           70  static void setfullscreen(Client *c, int fullscreen);
           71 +static void setgaps(const Arg *arg);
           72  static void setlayout(const Arg *arg);
           73  static void setmfact(const Arg *arg);
           74  static void setup(void);
           75 @@ -639,6 +651,8 @@ createmon(void)
           76          m->nmaster = nmaster;
           77          m->showbar = showbar;
           78          m->topbar = topbar;
           79 +        m->gap = malloc(sizeof(Gap));
           80 +        gap_copy(m->gap, &default_gap);
           81          m->lt[0] = &layouts[0];
           82          m->lt[1] = &layouts[1 % LENGTH(layouts)];
           83          strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
           84 @@ -1498,6 +1512,35 @@ setfullscreen(Client *c, int fullscreen)
           85          }
           86  }
           87  
           88 +void
           89 +gap_copy(Gap *to, const Gap *from)
           90 +{
           91 +        to->isgap   = from->isgap;
           92 +        to->realgap = from->realgap;
           93 +        to->gappx   = from->gappx;
           94 +}
           95 +
           96 +void
           97 +setgaps(const Arg *arg)
           98 +{
           99 +        Gap *p = selmon->gap;
          100 +        switch(arg->i)
          101 +        {
          102 +                case GAP_TOGGLE:
          103 +                        p->isgap = 1 - p->isgap;
          104 +                        break;
          105 +                case GAP_RESET:
          106 +                        gap_copy(p, &default_gap);
          107 +                        break;
          108 +                default:
          109 +                        p->realgap += arg->i;
          110 +                        p->isgap = 1;
          111 +        }
          112 +        p->realgap = MAX(p->realgap, 0);
          113 +        p->gappx = p->realgap * p->isgap;
          114 +        arrange(selmon);
          115 +}
          116 +
          117  void
          118  setlayout(const Arg *arg)
          119  {
          120 @@ -1684,18 +1727,18 @@ tile(Monitor *m)
          121          if (n > m->nmaster)
          122                  mw = m->nmaster ? m->ww * m->mfact : 0;
          123          else
          124 -                mw = m->ww;
          125 -        for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
          126 +                mw = m->ww - m->gap->gappx;
          127 +        for (i = 0, my = ty = m->gap->gappx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
          128                  if (i < m->nmaster) {
          129 -                        h = (m->wh - my) / (MIN(n, m->nmaster) - i);
          130 -                        resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
          131 -                        if (my + HEIGHT(c) < m->wh)
          132 -                                my += HEIGHT(c);
          133 +                        h = (m->wh - my) / (MIN(n, m->nmaster) - i) - m->gap->gappx;
          134 +                        resize(c, m->wx + m->gap->gappx, m->wy + my, mw - (2*c->bw) - m->gap->gappx, h - (2*c->bw), 0);
          135 +                        if (my + HEIGHT(c) + m->gap->gappx < m->wh)
          136 +                                my += HEIGHT(c) + m->gap->gappx;
          137                  } else {
          138 -                        h = (m->wh - ty) / (n - i);
          139 -                        resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
          140 -                        if (ty + HEIGHT(c) < m->wh)
          141 -                                ty += HEIGHT(c);
          142 +                        h = (m->wh - ty) / (n - i) - m->gap->gappx;
          143 +                        resize(c, m->wx + mw + m->gap->gappx, m->wy + ty, m->ww - mw - (2*c->bw) - 2*m->gap->gappx, h - (2*c->bw), 0);
          144 +                        if (ty + HEIGHT(c) + m->gap->gappx < m->wh)
          145 +                                ty += HEIGHT(c) + m->gap->gappx;
          146                  }
          147  }
          148