dwm-attachbelow-toggleable-6.2.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-attachbelow-toggleable-6.2.diff (6046B)
       ---
            1 From ee036687ed9e1bb973b9e34694a57cf5dd67652d Mon Sep 17 00:00:00 2001
            2 From: Jonathan Hodgson <git@jonathanh.co.uk>
            3 Date: Mon, 6 May 2019 18:34:40 +0100
            4 Subject: [PATCH 1/4] Adds attach below option
            5 
            6 ---
            7  config.def.h |  1 +
            8  dwm.c        | 31 ++++++++++++++++++++++++++++---
            9  2 files changed, 29 insertions(+), 3 deletions(-)
           10 
           11 diff --git a/config.def.h b/config.def.h
           12 index 1c0b587..51ad933 100644
           13 --- a/config.def.h
           14 +++ b/config.def.h
           15 @@ -35,6 +35,7 @@ static const Rule rules[] = {
           16  static const float mfact     = 0.55; /* factor of master area size [0.05..0.95] */
           17  static const int nmaster     = 1;    /* number of clients in master area */
           18  static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
           19 +static const int attachbelow = 1;    /* 1 means attach at the end */
           20  
           21  static const Layout layouts[] = {
           22          /* symbol     arrange function */
           23 diff --git a/dwm.c b/dwm.c
           24 index 4465af1..bd715a2 100644
           25 --- a/dwm.c
           26 +++ b/dwm.c
           27 @@ -147,6 +147,7 @@ static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interac
           28  static void arrange(Monitor *m);
           29  static void arrangemon(Monitor *m);
           30  static void attach(Client *c);
           31 +static void attachBelow(Client *c);
           32  static void attachstack(Client *c);
           33  static void buttonpress(XEvent *e);
           34  static void checkotherwm(void);
           35 @@ -405,6 +406,21 @@ attach(Client *c)
           36          c->next = c->mon->clients;
           37          c->mon->clients = c;
           38  }
           39 +void
           40 +attachBelow(Client *c)
           41 +{
           42 +        //If there is nothing on the monitor or the selected client is floating, attach as normal
           43 +        if(c->mon->sel == NULL || c->mon->sel == c || c->mon->sel->isfloating) {
           44 +                attach(c);
           45 +                return;
           46 +        }
           47 +
           48 +        //Set the new client's next property to the same as the currently selected clients next
           49 +        c->next = c->mon->sel->next;
           50 +        //Set the currently selected clients next property to the new client
           51 +        c->mon->sel->next = c;
           52 +
           53 +}
           54  
           55  void
           56  attachstack(Client *c)
           57 @@ -1062,7 +1078,10 @@ manage(Window w, XWindowAttributes *wa)
           58                  c->isfloating = c->oldstate = trans != None || c->isfixed;
           59          if (c->isfloating)
           60                  XRaiseWindow(dpy, c->win);
           61 -        attach(c);
           62 +        if( attachbelow )
           63 +                attachBelow(c);
           64 +        else
           65 +                attach(c);
           66          attachstack(c);
           67          XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend,
           68                  (unsigned char *) &(c->win), 1);
           69 @@ -1417,7 +1436,10 @@ sendmon(Client *c, Monitor *m)
           70          detachstack(c);
           71          c->mon = m;
           72          c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
           73 -        attach(c);
           74 +        if( attachbelow )
           75 +                attachBelow(c);
           76 +        else
           77 +                attach(c);
           78          attachstack(c);
           79          focus(NULL);
           80          arrange(NULL);
           81 @@ -1897,7 +1919,10 @@ updategeom(void)
           82                                          m->clients = c->next;
           83                                          detachstack(c);
           84                                          c->mon = mons;
           85 -                                        attach(c);
           86 +                                        if( attachbelow )
           87 +                                                attachBelow(c);
           88 +                                        else
           89 +                                                attach(c);
           90                                          attachstack(c);
           91                                  }
           92                                  if (m == selmon)
           93 -- 
           94 2.21.0
           95 
           96 
           97 From e212c1d8cbdcc56c33c717131dfa7c1689e27e9f Mon Sep 17 00:00:00 2001
           98 From: Jonathan Hodgson <git@jonathanh.co.uk>
           99 Date: Mon, 6 May 2019 19:27:57 +0100
          100 Subject: [PATCH 2/4] fixes comment
          101 
          102 ---
          103  config.def.h | 2 +-
          104  1 file changed, 1 insertion(+), 1 deletion(-)
          105 
          106 diff --git a/config.def.h b/config.def.h
          107 index 51ad933..cb8053a 100644
          108 --- a/config.def.h
          109 +++ b/config.def.h
          110 @@ -35,7 +35,7 @@ static const Rule rules[] = {
          111  static const float mfact     = 0.55; /* factor of master area size [0.05..0.95] */
          112  static const int nmaster     = 1;    /* number of clients in master area */
          113  static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
          114 -static const int attachbelow = 1;    /* 1 means attach at the end */
          115 +static const int attachbelow = 1;    /* 1 means attach after the currently active window */
          116  
          117  static const Layout layouts[] = {
          118          /* symbol     arrange function */
          119 -- 
          120 2.21.0
          121 
          122 
          123 From 7568ea3f8756e7e82b30c4943556ae646a445d1c Mon Sep 17 00:00:00 2001
          124 From: Jonathan Hodgson <git@jonathanh.co.uk>
          125 Date: Mon, 6 May 2019 20:00:30 +0100
          126 Subject: [PATCH 3/4] Makes changes to man page to reflect attach below patch
          127 
          128 ---
          129  dwm.1 | 3 +++
          130  1 file changed, 3 insertions(+)
          131 
          132 diff --git a/dwm.1 b/dwm.1
          133 index 13b3729..fb6e76c 100644
          134 --- a/dwm.1
          135 +++ b/dwm.1
          136 @@ -29,6 +29,9 @@ color. The tags of the focused window are indicated with a filled square in the
          137  top left corner.  The tags which are applied to one or more windows are
          138  indicated with an empty square in the top left corner.
          139  .P
          140 +The attach below patch makes newly spawned windows attach after the currently
          141 +selected window
          142 +.P
          143  dwm draws a small border around windows to indicate the focus state.
          144  .SH OPTIONS
          145  .TP
          146 -- 
          147 2.21.0
          148 
          149 
          150 From 362b95a5b9f91673f27f3e3343b5738df3c9d6e9 Mon Sep 17 00:00:00 2001
          151 From: Jonathan Hodgson <git@jonathanh.co.uk>
          152 Date: Sun, 2 Jun 2019 15:11:57 +0100
          153 Subject: [PATCH 4/4] Allows attach below to be toggled
          154 
          155 ---
          156  config.def.h | 2 +-
          157  dwm.c        | 6 ++++++
          158  2 files changed, 7 insertions(+), 1 deletion(-)
          159 
          160 diff --git a/config.def.h b/config.def.h
          161 index cb8053a..b4d35aa 100644
          162 --- a/config.def.h
          163 +++ b/config.def.h
          164 @@ -35,7 +35,7 @@ static const Rule rules[] = {
          165  static const float mfact     = 0.55; /* factor of master area size [0.05..0.95] */
          166  static const int nmaster     = 1;    /* number of clients in master area */
          167  static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
          168 -static const int attachbelow = 1;    /* 1 means attach after the currently active window */
          169 +static int attachbelow = 1;    /* 1 means attach after the currently active window */
          170  
          171  static const Layout layouts[] = {
          172          /* symbol     arrange function */
          173 diff --git a/dwm.c b/dwm.c
          174 index bd715a2..5d88653 100644
          175 --- a/dwm.c
          176 +++ b/dwm.c
          177 @@ -148,6 +148,7 @@ static void arrange(Monitor *m);
          178  static void arrangemon(Monitor *m);
          179  static void attach(Client *c);
          180  static void attachBelow(Client *c);
          181 +static void toggleAttachBelow();
          182  static void attachstack(Client *c);
          183  static void buttonpress(XEvent *e);
          184  static void checkotherwm(void);
          185 @@ -422,6 +423,11 @@ attachBelow(Client *c)
          186  
          187  }
          188  
          189 +void toggleAttachBelow()
          190 +{
          191 +        attachbelow = !attachbelow;
          192 +}
          193 +
          194  void
          195  attachstack(Client *c)
          196  {
          197 -- 
          198 2.21.0
          199