dwm-multimon-5-push_up_down-6.4.patch - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-multimon-5-push_up_down-6.4.patch (5895B)
       ---
            1 From 9a762d6e157bb057c7296f94579ab9632882d60f Mon Sep 17 00:00:00 2001
            2 From: "Gary B. Genett" <me@garybgenett.net>
            3 Date: Sun, 19 Feb 2023 09:37:49 -0800
            4 Subject: patches/push: dwm-push-20201112-61bb8b2.diff
            5 MIME-Version: 1.0
            6 Content-Type: multipart/mixed; boundary="------------2.37.4"
            7 
            8 This is a multi-part message in MIME format.
            9 --------------2.37.4
           10 Content-Type: text/plain; charset=UTF-8; format=fixed
           11 Content-Transfer-Encoding: 8bit
           12 
           13 
           14         modified from sites: 38b351cf3689ff3fa4845d35ce9894fd9253dbb8
           15 ---
           16  config.def.h |  2 ++
           17  dwm.c        | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
           18  2 files changed, 61 insertions(+)
           19 
           20 
           21 --------------2.37.4
           22 Content-Type: text/x-patch; name="0005-patches-push-dwm-push-20201112-61bb8b2.diff.patch"
           23 Content-Transfer-Encoding: 8bit
           24 Content-Disposition: attachment; filename="0005-patches-push-dwm-push-20201112-61bb8b2.diff.patch"
           25 
           26 diff --git a/config.def.h b/config.def.h
           27 index fcfe8245a438686f276ffc9a4df17695382ed58b..fd00f7080db9271912d0e4352434739d3c08e1b3 100644
           28 --- a/config.def.h
           29 +++ b/config.def.h
           30 @@ -71,20 +71,22 @@ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn()
           31  static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
           32  static const char *termcmd[]  = { "st", NULL };
           33  
           34  static const Key keys[] = {
           35          /* modifier                     key        function        argument */
           36          { MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
           37          { MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
           38          { MODKEY,                       XK_b,      togglebar,      {0} },
           39          { MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
           40          { MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
           41 +        { MODKEY|ShiftMask,             XK_j,      pushdown,       {0} },
           42 +        { MODKEY|ShiftMask,             XK_k,      pushup,         {0} },
           43          { MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
           44          { MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
           45          { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
           46          { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
           47          { MODKEY,                       XK_Return, zoom,           {0} },
           48          { MODKEY,                       XK_Tab,    view,           {0} },
           49          { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
           50          { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
           51          { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
           52          { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
           53 diff --git a/dwm.c b/dwm.c
           54 index 77ff310e03edbf42ac2dd55471962ce259b63071..5aa229611a27b8aa943308314b494c10e2364137 100644
           55 --- a/dwm.c
           56 +++ b/dwm.c
           57 @@ -178,25 +178,28 @@ static void grabbuttons(Client *c, int focused);
           58  static void grabkeys(void);
           59  static void incnmaster(const Arg *arg);
           60  static void keypress(XEvent *e);
           61  static void killclient(const Arg *arg);
           62  static void manage(Window w, XWindowAttributes *wa);
           63  static void mappingnotify(XEvent *e);
           64  static void maprequest(XEvent *e);
           65  static void monocle(Monitor *m);
           66  static void motionnotify(XEvent *e);
           67  static void movemouse(const Arg *arg);
           68 +static Client *prevtiled(Client *c);
           69  static Client *nexttiled(Client *c);
           70  static void pop(Client *c);
           71  static void propertynotify(XEvent *e);
           72  static void quit(const Arg *arg);
           73  static Monitor *recttomon(int x, int y, int w, int h);
           74 +static void pushdown(const Arg *arg);
           75 +static void pushup(const Arg *arg);
           76  static void resize(Client *c, int x, int y, int w, int h, int interact);
           77  static void resizeclient(Client *c, int x, int y, int w, int h);
           78  static void resizemouse(const Arg *arg);
           79  static void restack(Monitor *m);
           80  static void run(void);
           81  static void scan(void);
           82  static int sendevent(Client *c, Atom proto);
           83  static void sendmon(Client *c, Monitor *m);
           84  static void setclientstate(Client *c, long state);
           85  static void setfocus(Client *c);
           86 @@ -1206,20 +1209,31 @@ movemouse(const Arg *arg)
           87                  }
           88          } while (ev.type != ButtonRelease);
           89          XUngrabPointer(dpy, CurrentTime);
           90          if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
           91                  sendmon(c, m);
           92                  selmon = m;
           93                  focus(NULL);
           94          }
           95  }
           96  
           97 +Client *
           98 +prevtiled(Client *c)
           99 +{
          100 +        Client *p, *r;
          101 +
          102 +        for(p = selmon->clients, r = NULL; p && p != c; p = p->next)
          103 +                if(!p->isfloating && ISVISIBLE(p))
          104 +                        r = p;
          105 +        return r;
          106 +}
          107 +
          108  Client *
          109  nexttiled(Client *c)
          110  {
          111          for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);
          112          return c;
          113  }
          114  
          115  void
          116  pop(Client *c)
          117  {
          118 @@ -1279,20 +1293,65 @@ recttomon(int x, int y, int w, int h)
          119          int a, area = 0;
          120  
          121          for (m = mons; m; m = m->next)
          122                  if ((a = INTERSECT(x, y, w, h, m)) > area) {
          123                          area = a;
          124                          r = m;
          125                  }
          126          return r;
          127  }
          128  
          129 +void
          130 +pushdown(const Arg *arg)
          131 +{
          132 +        Client *sel = selmon->sel, *c;
          133 +
          134 +        if(!sel || sel->isfloating)
          135 +                return;
          136 +        if((c = nexttiled(sel->next))) {
          137 +                detach(sel);
          138 +                sel->next = c->next;
          139 +                c->next = sel;
          140 +        } else {
          141 +                detach(sel);
          142 +                attach(sel);
          143 +        }
          144 +        focus(sel);
          145 +        arrange(selmon);
          146 +}
          147 +
          148 +void
          149 +pushup(const Arg *arg)
          150 +{
          151 +        Client *sel = selmon->sel, *c;
          152 +
          153 +        if(!sel || sel->isfloating)
          154 +                return;
          155 +        if((c = prevtiled(sel))) {
          156 +                detach(sel);
          157 +                sel->next = c;
          158 +                if(selmon->clients == c)
          159 +                        selmon->clients = sel;
          160 +                else {
          161 +                        for(c = selmon->clients; c->next != sel->next; c = c->next);
          162 +                        c->next = sel;
          163 +                }
          164 +        } else {
          165 +                for(c = sel; c->next; c = c->next);
          166 +                detach(sel);
          167 +                sel->next = NULL;
          168 +                c->next = sel;
          169 +        }
          170 +        focus(sel);
          171 +        arrange(selmon);
          172 +}
          173 +
          174  void
          175  resize(Client *c, int x, int y, int w, int h, int interact)
          176  {
          177          if (applysizehints(c, &x, &y, &w, &h, interact))
          178                  resizeclient(c, x, y, w, h);
          179  }
          180  
          181  void
          182  resizeclient(Client *c, int x, int y, int w, int h)
          183  {
          184 
          185 --------------2.37.4--
          186 
          187