Thanks for letting me know.

Best regards

On Fri, Dec 17, 2021, 11:53 Hiltjo Posthuma <hil...@codemadness.org> wrote:

> You send it to the wrong mailinglist.
>
> If its a wiki patch you can upload it, see the wiki guidelines.
>
> Thanks,
>
> On Fri, Dec 17, 2021 at 02:03:15AM +0200, שלומי אקנין wrote:
> > From 76d72e24117a5626827cfb0ef49515ec7f7dd4fe Mon Sep 17 00:00:00 2001
> > From: shlomi-aknin <shlomi.ak...@gmail.com>
> > Date: Thu, 16 Dec 2021 14:53:02 +0200
> > Subject: [PATCH] This patch incorporates gaplessgrid patch. This patch
> adds
> >  the ability to focus on left or right window of the current window
> (works
> > in
> >  gaplessgrid layout only)
> >
> > ---
> >  config.def.h | 5 +++-
> >  dwm.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++-
> >  2 files changed, 77 insertions(+), 2 deletions(-)
> >
> > diff --git a/config.def.h b/config.def.h
> > index a2ac963..c63a640 100644
> > --- a/config.def.h
> > +++ b/config.def.h
> > @@ -42,6 +42,7 @@ static const Layout layouts[] = {
> >   { "[]=", tile }, /* first entry is default */
> >   { "><>", NULL }, /* no layout function means floating behavior */
> >   { "[M]", monocle },
> > + { "###", gaplessgrid },
> >  };
> >
> >  /* key definitions */
> > @@ -77,6 +78,7 @@ static Key keys[] = {
> >   { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
> >   { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
> >   { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
> > + { MODKEY, XK_g, setlayout, {.v = &layouts[3]} },
> >   { MODKEY, XK_space, setlayout, {0} },
> >   { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
> >   { MODKEY, XK_0, view, {.ui = ~0 } },
> > @@ -85,6 +87,8 @@ static Key keys[] = {
> >   { MODKEY, XK_period, focusmon, {.i = +1 } },
> >   { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
> >   { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
> > + { MODKEY|ControlMask, XK_l, gaplessgridleftright, {.i = +1 } },
> > + { MODKEY|ControlMask, XK_h, gaplessgridleftright, {.i = -1 } },
> >   TAGKEYS( XK_1, 0)
> >   TAGKEYS( XK_2, 1)
> >   TAGKEYS( XK_3, 2)
> > @@ -113,4 +117,3 @@ static Button buttons[] = {
> >   { ClkTagBar, MODKEY, Button1, tag, {0} },
> >   { ClkTagBar, MODKEY, Button3, toggletag, {0} },
> >  };
> > -
> > diff --git a/dwm.c b/dwm.c
> > index 5e4d494..a7fb265 100644
> > --- a/dwm.c
> > +++ b/dwm.c
> > @@ -91,6 +91,7 @@ struct Client {
> >   int oldx, oldy, oldw, oldh;
> >   int basew, baseh, incw, inch, maxw, maxh, minw, minh;
> >   int bw, oldbw;
> > + int gridrow, gridcol;
> >   unsigned int tags;
> >   int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
> >   Client *next;
> > @@ -169,6 +170,8 @@ static void focus(Client *c);
> >  static void focusin(XEvent *e);
> >  static void focusmon(const Arg *arg);
> >  static void focusstack(const Arg *arg);
> > +static void gaplessgrid(Monitor *m);
> > +static void gaplessgridleftright(const Arg *arg);
> >  static Atom getatomprop(Client *c, Atom prop);
> >  static int getrootptr(int *x, int *y);
> >  static long getstate(Window w);
> > @@ -856,6 +859,76 @@ focusstack(const Arg *arg)
> >   }
> >  }
> >
> > +void
> > +gaplessgrid(Monitor *m)
> > +{
> > + unsigned int n, cols, rows, cn, rn, i, cx, cy, cw, ch;
> > + Client *c;
> > +
> > + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) ;
> > + if(n == 0)
> > + return;
> > +
> > + /* grid dimensions */
> > + for(cols = 0; cols <= n/2; cols++)
> > + if(cols*cols >= n)
> > + break;
> > + if(n == 5) /* set layout against the general calculation: not 1:2:2,
> but
> > 2:3 */
> > + cols = 2;
> > + rows = n/cols;
> > +
> > + /* window geometries */
> > + cw = cols ? m->ww / cols : m->ww;
> > + cn = 0; /* current column number */
> > + rn = 0; /* current row number */
> > + for(i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) {
> > + if(i/rows + 1 > cols - n%cols)
> > + rows = n/cols + 1;
> > + ch = rows ? m->wh / rows : m->wh;
> > + cx = m->wx + cn*cw;
> > + cy = m->wy + rn*ch;
> > + c->gridrow = rn;
> > + c->gridcol = cn;
> > + resize(c, cx, cy, cw - 2 * c->bw, ch - 2 * c->bw, False);
> > + rn++;
> > + if(rn >= rows) {
> > + rn = 0;
> > + cn++;
> > + }
> > + }
> > +}
> > +
> > +void
> > +gaplessgridleftright(const Arg *arg)
> > +{
> > + Client *c = selmon->sel;
> > + Client *t = NULL;
> > + int found = 0;
> > + if(selmon->lt[selmon->sellt]->arrange != gaplessgrid || !ISVISIBLE(c))
> > return;
> > +
> > + if (arg->i > 0) {
> > + for(t = selmon->sel->next; t; t = t->next) {
> > + if (t->gridcol == c->gridcol + 1 && t->gridrow == c->gridrow) break;
> > + }
> > + } else {
> > + for(t = selmon->clients; t; t = t->next) {
> > + if (t->gridcol == c->gridcol - 1 && t->gridrow == c->gridrow) {
> > + found = 1;
> > + break;
> > + }
> > + }
> > +
> > + if (found == 0) {
> > + for(t = selmon->clients; t; t = t->next) {
> > + if (t->gridcol == c->gridcol - 1 && t->gridrow == c->gridrow - 1)
> break;
> > + }
> > + }
> > + }
> > +
> > + focus(t);
> > + arrange(selmon);
> > +}
> > +
> >  Atom
> >  getatomprop(Client *c, Atom prop)
> >  {
> > @@ -1597,7 +1670,6 @@ setup(void)
> >   focus(NULL);
> >  }
> >
> > -
> >  void
> >  seturgent(Client *c, int urg)
> >  {
> > --
> > 2.34.1
>
> > From 76d72e24117a5626827cfb0ef49515ec7f7dd4fe Mon Sep 17 00:00:00 2001
> > From: shlomi-aknin <shlomi.ak...@gmail.com>
> > Date: Thu, 16 Dec 2021 14:53:02 +0200
> > Subject: [PATCH] This patch incorporates gaplessgrid patch. This patch
> adds
> >  the ability to focus on left or right window of the current window
> (works in
> >  gaplessgrid layout only)
> >
> > ---
> >  config.def.h |  5 +++-
> >  dwm.c        | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++-
> >  2 files changed, 77 insertions(+), 2 deletions(-)
> >
> > diff --git a/config.def.h b/config.def.h
> > index a2ac963..c63a640 100644
> > --- a/config.def.h
> > +++ b/config.def.h
> > @@ -42,6 +42,7 @@ static const Layout layouts[] = {
> >       { "[]=",      tile },    /* first entry is default */
> >       { "><>",      NULL },    /* no layout function means floating
> behavior */
> >       { "[M]",      monocle },
> > +  { "###",      gaplessgrid },
> >  };
> >
> >  /* key definitions */
> > @@ -77,6 +78,7 @@ static Key keys[] = {
> >       { MODKEY,                       XK_t,      setlayout,      {.v =
> &layouts[0]} },
> >       { MODKEY,                       XK_f,      setlayout,      {.v =
> &layouts[1]} },
> >       { MODKEY,                       XK_m,      setlayout,      {.v =
> &layouts[2]} },
> > +     { MODKEY,                       XK_g,      setlayout,      {.v =
> &layouts[3]} },
> >       { MODKEY,                       XK_space,  setlayout,      {0} },
> >       { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
> >       { MODKEY,                       XK_0,      view,           {.ui =
> ~0 } },
> > @@ -85,6 +87,8 @@ static Key keys[] = {
> >       { MODKEY,                       XK_period, focusmon,       {.i =
> +1 } },
> >       { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i =
> -1 } },
> >       { MODKEY|ShiftMask,             XK_period, tagmon,         {.i =
> +1 } },
> > +     { MODKEY|ControlMask,           XK_l,      gaplessgridleftright,
> {.i = +1 } },
> > +     { MODKEY|ControlMask,           XK_h,      gaplessgridleftright,
> {.i = -1 } },
> >       TAGKEYS(                        XK_1,                      0)
> >       TAGKEYS(                        XK_2,                      1)
> >       TAGKEYS(                        XK_3,                      2)
> > @@ -113,4 +117,3 @@ static Button buttons[] = {
> >       { ClkTagBar,            MODKEY,         Button1,        tag,
>       {0} },
> >       { ClkTagBar,            MODKEY,         Button3,
> toggletag,      {0} },
> >  };
> > -
> > diff --git a/dwm.c b/dwm.c
> > index 5e4d494..a7fb265 100644
> > --- a/dwm.c
> > +++ b/dwm.c
> > @@ -91,6 +91,7 @@ struct Client {
> >       int oldx, oldy, oldw, oldh;
> >       int basew, baseh, incw, inch, maxw, maxh, minw, minh;
> >       int bw, oldbw;
> > +  int gridrow, gridcol;
> >       unsigned int tags;
> >       int isfixed, isfloating, isurgent, neverfocus, oldstate,
> isfullscreen;
> >       Client *next;
> > @@ -169,6 +170,8 @@ static void focus(Client *c);
> >  static void focusin(XEvent *e);
> >  static void focusmon(const Arg *arg);
> >  static void focusstack(const Arg *arg);
> > +static void gaplessgrid(Monitor *m);
> > +static void gaplessgridleftright(const Arg *arg);
> >  static Atom getatomprop(Client *c, Atom prop);
> >  static int getrootptr(int *x, int *y);
> >  static long getstate(Window w);
> > @@ -856,6 +859,76 @@ focusstack(const Arg *arg)
> >       }
> >  }
> >
> > +void
> > +gaplessgrid(Monitor *m)
> > +{
> > +     unsigned int n, cols, rows, cn, rn, i, cx, cy, cw, ch;
> > +     Client *c;
> > +
> > +     for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next),
> n++) ;
> > +     if(n == 0)
> > +             return;
> > +
> > +     /* grid dimensions */
> > +     for(cols = 0; cols <= n/2; cols++)
> > +             if(cols*cols >= n)
> > +                     break;
> > +     if(n == 5) /* set layout against the general calculation: not
> 1:2:2, but 2:3 */
> > +             cols = 2;
> > +     rows = n/cols;
> > +
> > +     /* window geometries */
> > +     cw = cols ? m->ww / cols : m->ww;
> > +     cn = 0; /* current column number */
> > +     rn = 0; /* current row number */
> > +     for(i = 0, c = nexttiled(m->clients); c; i++, c =
> nexttiled(c->next)) {
> > +             if(i/rows + 1 > cols - n%cols)
> > +                     rows = n/cols + 1;
> > +             ch = rows ? m->wh / rows : m->wh;
> > +             cx = m->wx + cn*cw;
> > +             cy = m->wy + rn*ch;
> > +   c->gridrow = rn;
> > +   c->gridcol = cn;
> > +             resize(c, cx, cy, cw - 2 * c->bw, ch - 2 * c->bw, False);
> > +             rn++;
> > +             if(rn >= rows) {
> > +                     rn = 0;
> > +                     cn++;
> > +             }
> > +     }
> > +}
> > +
> > +void
> > +gaplessgridleftright(const Arg *arg)
> > +{
> > +  Client *c = selmon->sel;
> > +  Client *t = NULL;
> > +  int found = 0;
> > +  if(selmon->lt[selmon->sellt]->arrange != gaplessgrid ||
> !ISVISIBLE(c)) return;
> > +
> > +  if (arg->i > 0) {
> > +    for(t = selmon->sel->next; t; t = t->next) {
> > +      if (t->gridcol == c->gridcol + 1 && t->gridrow == c->gridrow)
> break;
> > +    }
> > +  } else {
> > +    for(t = selmon->clients; t; t = t->next) {
> > +      if (t->gridcol == c->gridcol - 1 && t->gridrow == c->gridrow) {
> > +        found = 1;
> > +        break;
> > +      }
> > +    }
> > +
> > +    if (found == 0) {
> > +      for(t = selmon->clients; t; t = t->next) {
> > +        if (t->gridcol == c->gridcol - 1 && t->gridrow == c->gridrow -
> 1) break;
> > +      }
> > +    }
> > +  }
> > +
> > +  focus(t);
> > +  arrange(selmon);
> > +}
> > +
> >  Atom
> >  getatomprop(Client *c, Atom prop)
> >  {
> > @@ -1597,7 +1670,6 @@ setup(void)
> >       focus(NULL);
> >  }
> >
> > -
> >  void
> >  seturgent(Client *c, int urg)
> >  {
> > --
> > 2.34.1
>
>
> --
> Kind regards,
> Hiltjo
>
>

Reply via email to