dwm-tilewide-6.3.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-tilewide-6.3.diff (2840B)
       ---
            1 From 2916c7a93066da8005e2e30c1e9d90b1e25ac1a1 Mon Sep 17 00:00:00 2001
            2 From: sympodius <mail@sympodius.net>
            3 Date: Sat, 30 Apr 2022 10:57:37 +0100
            4 Subject: [PATCH] The 'tilewide' layout is a variant of the standard 'tile'
            5  layout for dwm. Windows added to the master area will be positioned side by
            6  side, instead of one on top of the other. This makes better use of screen
            7  space on ultra wide monitors. The stack area remains identical to the
            8  original 'tile' layout.
            9 
           10 ---
           11  config.def.h |  2 ++
           12  dwm.c        | 29 +++++++++++++++++++++++++++++
           13  2 files changed, 31 insertions(+)
           14 
           15 diff --git a/config.def.h b/config.def.h
           16 index a2ac963..e7cd62b 100644
           17 --- a/config.def.h
           18 +++ b/config.def.h
           19 @@ -42,6 +42,7 @@ static const Layout layouts[] = {
           20          { "[]=",      tile },    /* first entry is default */
           21          { "><>",      NULL },    /* no layout function means floating behavior */
           22          { "[M]",      monocle },
           23 +        { "[][]=",    tilewide },
           24  };
           25  
           26  /* key definitions */
           27 @@ -77,6 +78,7 @@ static Key keys[] = {
           28          { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
           29          { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
           30          { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
           31 +        { MODKEY,                       XK_w,      setlayout,      {.v = &layouts[3]} },
           32          { MODKEY,                       XK_space,  setlayout,      {0} },
           33          { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
           34          { MODKEY,                       XK_0,      view,           {.ui = ~0 } },
           35 diff --git a/dwm.c b/dwm.c
           36 index a96f33c..b3ac43b 100644
           37 --- a/dwm.c
           38 +++ b/dwm.c
           39 @@ -234,6 +234,7 @@ static int xerror(Display *dpy, XErrorEvent *ee);
           40  static int xerrordummy(Display *dpy, XErrorEvent *ee);
           41  static int xerrorstart(Display *dpy, XErrorEvent *ee);
           42  static void zoom(const Arg *arg);
           43 +static void tilewide(Monitor *m);
           44  
           45  /* variables */
           46  static const char broken[] = "broken";
           47 @@ -2153,3 +2154,31 @@ main(int argc, char *argv[])
           48          XCloseDisplay(dpy);
           49          return EXIT_SUCCESS;
           50  }
           51 +
           52 +void
           53 +tilewide(Monitor *m)
           54 +{
           55 +        unsigned int i, n, w, h, mw, mx, ty;
           56 +        Client *c;
           57 +
           58 +        for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
           59 +        if (n == 0)
           60 +                return;
           61 +        if (n > m->nmaster)
           62 +                mw = m->nmaster ? m->ww * m->mfact : 0;
           63 +        else
           64 +                mw = m->ww;
           65 +        for (i = mx = ty = 0, c = nexttiled(m->clients); c;
           66 +             c = nexttiled(c->next), i++)
           67 +                if (i < m->nmaster) {
           68 +                        w = (mw - mx) / (MIN(n, m->nmaster) - i);
           69 +                        resize(c, m->wx + mx, m->wy, w - (2*c->bw), (m->wh - ty) - (2*c->bw), 0);
           70 +                        if  (mx + WIDTH(c) < m->ww)
           71 +                                mx += WIDTH(c);
           72 +                } else {
           73 +                        h = (m->wh - ty) / (n - i);
           74 +                        resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
           75 +                        if (ty + HEIGHT(c) < m->wh)
           76 +                                ty += HEIGHT(c);
           77 +                }
           78 +}
           79 -- 
           80 2.35.1
           81