dwm-4.4.1-nmaster.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-4.4.1-nmaster.diff (3122B)
       ---
            1 diff -r 795c26a59016 config.default.h
            2 --- a/config.default.h        Sun Aug 26 12:54:20 2007 +0200
            3 +++ b/config.default.h        Sun Aug 26 15:06:20 2007 +0200
            4 @@ -33,6 +33,7 @@ static Layout layouts[] = { \
            5          { "><>",                floating }, \
            6  };
            7  #define MWFACT                        0.6        /* master width factor [0.1 .. 0.9] */
            8 +#define NMASTER                        1        /* clients in master area */
            9  #define SNAP                        32        /* snap pixel */
           10  
           11  /* key definitions */
           12 @@ -48,6 +49,8 @@ Key keys[] = { \
           13          { MODKEY,                        XK_k,                focusprev,        NULL }, \
           14          { MODKEY,                        XK_h,                setmwfact,        "-0.05" }, \
           15          { MODKEY,                        XK_l,                setmwfact,        "+0.05" }, \
           16 +        { MODKEY|ShiftMask,                XK_h,                incnmaster,        "-1" }, \
           17 +        { MODKEY|ShiftMask,                XK_l,                incnmaster,        "1" }, \
           18          { MODKEY,                        XK_m,                togglemax,        NULL }, \
           19          { MODKEY,                        XK_Return,        zoom,                NULL }, \
           20          { MODKEY|ShiftMask,                XK_space,        togglefloating,        NULL }, \
           21 diff -r 795c26a59016 tile.c
           22 --- a/tile.c        Sun Aug 26 12:54:20 2007 +0200
           23 +++ b/tile.c        Sun Aug 26 15:06:20 2007 +0200
           24 @@ -5,8 +5,29 @@
           25  /* static */
           26  
           27  static double mwfact = MWFACT;
           28 +static unsigned int nmaster = NMASTER;
           29  
           30  /* extern */
           31 +
           32 +void
           33 +incnmaster(const char *arg) {
           34 +        int i;
           35 +
           36 +        if(!isarrange(tile))
           37 +                return;
           38 +        if(!arg)
           39 +                nmaster = NMASTER;
           40 +        else {
           41 +                i = atoi(arg);
           42 +                if((nmaster + i) < 1 || wah / (nmaster + i) <= 2 * BORDERPX)
           43 +                        return;
           44 +                nmaster += i;
           45 +        }
           46 +        if(sel)
           47 +                arrange();
           48 +        else
           49 +                drawstatus();
           50 +}
           51  
           52  void
           53  setmwfact(const char *arg) {
           54 @@ -32,28 +53,33 @@ setmwfact(const char *arg) {
           55  
           56  void
           57  tile(void) {
           58 -        unsigned int i, n, nx, ny, nw, nh, mw, th;
           59 +        unsigned int i, n, nx, ny, nw, nh, mw, mh, th;
           60          Client *c;
           61  
           62          for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
           63                  n++;
           64  
           65          /* window geoms */
           66 -        mw = (n == 1) ? waw : mwfact * waw;
           67 -        th = (n > 1) ? wah / (n - 1) : 0;
           68 -        if(n > 1 && th < bh)
           69 +        mh = (n <= nmaster) ? wah / (n > 0 ? n : 1) : wah / nmaster;
           70 +        mw = (n <= nmaster) ? waw : mwfact * waw;
           71 +        th = (n > nmaster) ? wah / (n - nmaster) : 0;
           72 +        if(n > nmaster && th < bh)
           73                  th = wah;
           74  
           75          nx = wax;
           76          ny = way;
           77          for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++) {
           78                  c->ismax = False;
           79 -                if(i == 0) { /* master */
           80 +                if(i < nmaster) { /* master */
           81 +                        ny = way + i * mh;
           82                          nw = mw - 2 * c->border;
           83 -                        nh = wah - 2 * c->border;
           84 +                        nh = mh;
           85 +                        if(i + 1 == (n < nmaster ? n : nmaster)) /* remainder */
           86 +                                nh = wah - mh * i;
           87 +                        nh -= 2 * c->border;
           88                  }
           89                  else {  /* tile window */
           90 -                        if(i == 1) {
           91 +                        if(i == nmaster) {
           92                                  ny = way;
           93                                  nx += mw;
           94                          }
           95 @@ -64,7 +90,7 @@ tile(void) {
           96                                  nh = th - 2 * c->border;
           97                  }
           98                  resize(c, nx, ny, nw, nh, False);
           99 -                if(n > 1 && th != wah)
          100 +                if(n > nmaster && th != wah)
          101                          ny += nh + 2 * c->border;
          102          }
          103  }
          104 diff -r 795c26a59016 tile.h
          105 --- a/tile.h        Sun Aug 26 12:54:20 2007 +0200
          106 +++ b/tile.h        Sun Aug 26 15:06:20 2007 +0200
          107 @@ -1,6 +1,7 @@
          108  /* See LICENSE file for copyright and license details. */
          109  
          110  /* tile.c */
          111 +void incnmaster(const char *arg);        /* increments nmaster value */
          112  void setmwfact(const char *arg);        /* sets master width factor */
          113  void tile(void);                        /* arranges all windows tiled */
          114  void zoom(const char *arg);                /* zooms the focused client to master area, arg is ignored */