dwm-deck-6.0.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-deck-6.0.diff (3099B)
       ---
            1 From cb3cac91db32403bb581aecbc2957b00bb49c898 Mon Sep 17 00:00:00 2001
            2 From: aleks <aleks.stier@icloud.com>
            3 Date: Mon, 6 May 2019 16:34:58 +0200
            4 Subject: [PATCH] Add deck-layout
            5 
            6 deck is a dwm-layout which is inspired by the TTWM window manager.
            7 It applies the monocle-layout to the clients in the stack.
            8 The master-client is still visible. The stacked clients are like
            9 a deck of cards, hence the name.
           10 
           11 The vanilla patch doesn't work properly with patches which add gaps.
           12 This means that when the deck-layout is activated gaps are omitted.
           13 To make it work with the tilegap-patch apply the dwm-deck-tilegap patch
           14 on top of the dwm-deck patch.
           15 
           16 The vanilla patch doesn't respect the master-area which is defined by
           17 the rmaster-patch. To make it work with the rmaster-patch apply the
           18 dwm-deck-rmaster patch on top of the dwm-deck patch.
           19 ---
           20  config.def.h |  2 ++
           21  dwm.c        | 26 ++++++++++++++++++++++++++
           22  2 files changed, 28 insertions(+)
           23 
           24 diff --git a/config.def.h b/config.def.h
           25 index 77ff358..55d8a07 100644
           26 --- a/config.def.h
           27 +++ b/config.def.h
           28 @@ -32,6 +32,7 @@ static const Layout layouts[] = {
           29          { "[]=",      tile },    /* first entry is default */
           30          { "><>",      NULL },    /* no layout function means floating behavior */
           31          { "[M]",      monocle },
           32 +        { "[D]",      deck },
           33  };
           34  
           35  /* key definitions */
           36 @@ -66,6 +67,7 @@ static Key keys[] = {
           37          { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
           38          { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
           39          { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
           40 +        { MODKEY,                       XK_c,      setlayout,      {.v = &layouts[3]} },
           41          { MODKEY,                       XK_space,  setlayout,      {0} },
           42          { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
           43          { MODKEY,                       XK_0,      view,           {.ui = ~0 } },
           44 diff --git a/dwm.c b/dwm.c
           45 index 1d78655..356ab44 100644
           46 --- a/dwm.c
           47 +++ b/dwm.c
           48 @@ -171,6 +171,7 @@ static void configure(Client *c);
           49  static void configurenotify(XEvent *e);
           50  static void configurerequest(XEvent *e);
           51  static Monitor *createmon(void);
           52 +static void deck(Monitor *m);
           53  static void destroynotify(XEvent *e);
           54  static void detach(Client *c);
           55  static void detachstack(Client *c);
           56 @@ -669,6 +670,31 @@ destroynotify(XEvent *e) {
           57                  unmanage(c, True);
           58  }
           59  
           60 +void
           61 +deck(Monitor *m) {
           62 +        unsigned int i, n, h, mw, my;
           63 +        Client *c;
           64 +
           65 +        for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
           66 +        if(n == 0)
           67 +                return;
           68 +
           69 +        if(n > m->nmaster) {
           70 +                mw = m->nmaster ? m->ww * m->mfact : 0;
           71 +                snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n - m->nmaster);
           72 +        }
           73 +        else
           74 +                mw = m->ww;
           75 +        for(i = my = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
           76 +                if(i < m->nmaster) {
           77 +                        h = (m->wh - my) / (MIN(n, m->nmaster) - i);
           78 +                        resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), False);
           79 +                        my += HEIGHT(c);
           80 +                }
           81 +                else
           82 +                        resize(c, m->wx + mw, m->wy, m->ww - mw - (2*c->bw), m->wh - (2*c->bw), False);
           83 +}
           84 +
           85  void
           86  detach(Client *c) {
           87          Client **tc;
           88 -- 
           89 2.21.0
           90