URI: 
       dwm-6.0-pertag_without_bar.diff - sites - public wiki contents of suckless.org
  HTML git clone git://git.suckless.org/sites
   DIR Log
   DIR Files
   DIR Refs
       ---
       dwm-6.0-pertag_without_bar.diff (5578B)
       ---
            1 Author: Jan Christoph Ebersbach <jceb@e-jc.de>,
            2         Troy Sankey <sankeytms@gmail.com>
            3 This modified pertag patch keeps the bar static.  It is based on Jan
            4 Christoph Ebersbach's dwm-pertag-6.0.diff.
            5 
            6 diff --git a/dwm.c b/dwm.c
            7 index 1d78655..bd0a7d9 100644
            8 --- a/dwm.c
            9 +++ b/dwm.c
           10 @@ -124,6 +124,7 @@ typedef struct {
           11          void (*arrange)(Monitor *);
           12  } Layout;
           13  
           14 +typedef struct Pertag Pertag;
           15  struct Monitor {
           16          char ltsymbol[16];
           17          float mfact;
           18 @@ -143,6 +144,7 @@ struct Monitor {
           19          Monitor *next;
           20          Window barwin;
           21          const Layout *lt[2];
           22 +        Pertag *pertag;
           23  };
           24  
           25  typedef struct {
           26 @@ -287,6 +289,14 @@ static Window root;
           27  /* configuration, allows nested code to access above variables */
           28  #include "config.h"
           29  
           30 +struct Pertag {
           31 +        unsigned int curtag, prevtag; /* current and previous tag */
           32 +        int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */
           33 +        float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */
           34 +        unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */
           35 +        const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes  */
           36 +};
           37 +
           38  /* compile-time check if all tags fit into an unsigned int bit array. */
           39  struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
           40  
           41 @@ -646,6 +656,7 @@ configurerequest(XEvent *e) {
           42  Monitor *
           43  createmon(void) {
           44          Monitor *m;
           45 +        int i;
           46  
           47          if(!(m = (Monitor *)calloc(1, sizeof(Monitor))))
           48                  die("fatal: could not malloc() %u bytes\n", sizeof(Monitor));
           49 @@ -657,6 +668,21 @@ createmon(void) {
           50          m->lt[0] = &layouts[0];
           51          m->lt[1] = &layouts[1 % LENGTH(layouts)];
           52          strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
           53 +        if(!(m->pertag = (Pertag *)calloc(1, sizeof(Pertag))))
           54 +                die("fatal: could not malloc() %u bytes\n", sizeof(Pertag));
           55 +        m->pertag->curtag = m->pertag->prevtag = 1;
           56 +        for(i=0; i <= LENGTH(tags); i++) {
           57 +                /* init nmaster */
           58 +                m->pertag->nmasters[i] = m->nmaster;
           59 +
           60 +                /* init mfacts */
           61 +                m->pertag->mfacts[i] = m->mfact;
           62 +
           63 +                /* init layouts */
           64 +                m->pertag->ltidxs[i][0] = m->lt[0];
           65 +                m->pertag->ltidxs[i][1] = m->lt[1];
           66 +                m->pertag->sellts[i] = m->sellt;
           67 +        }
           68          return m;
           69  }
           70  
           71 @@ -1028,7 +1054,7 @@ grabkeys(void) {
           72  
           73  void
           74  incnmaster(const Arg *arg) {
           75 -        selmon->nmaster = MAX(selmon->nmaster + arg->i, 0);
           76 +        selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = MAX(selmon->nmaster + arg->i, 0);
           77          arrange(selmon);
           78  }
           79  
           80 @@ -1555,10 +1581,13 @@ setfullscreen(Client *c, Bool fullscreen) {
           81  
           82  void
           83  setlayout(const Arg *arg) {
           84 -        if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
           85 -                selmon->sellt ^= 1;
           86 +        if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) {
           87 +                selmon->pertag->sellts[selmon->pertag->curtag] ^= 1;
           88 +                selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
           89 +        }
           90          if(arg && arg->v)
           91 -                selmon->lt[selmon->sellt] = (Layout *)arg->v;
           92 +                selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *)arg->v;
           93 +        selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
           94          strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
           95          if(selmon->sel)
           96                  arrange(selmon);
           97 @@ -1576,7 +1605,7 @@ setmfact(const Arg *arg) {
           98          f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
           99          if(f < 0.1 || f > 0.9)
          100                  return;
          101 -        selmon->mfact = f;
          102 +        selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f;
          103          arrange(selmon);
          104  }
          105  
          106 @@ -1763,9 +1792,27 @@ toggletag(const Arg *arg) {
          107  void
          108  toggleview(const Arg *arg) {
          109          unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
          110 +        int i;
          111  
          112          if(newtagset) {
          113 +                if(newtagset == ~0) {
          114 +                        selmon->pertag->prevtag = selmon->pertag->curtag;
          115 +                        selmon->pertag->curtag = 0;
          116 +                }
          117 +                /* test if the user did not select the same tag */
          118 +                if(!(newtagset & 1 << (selmon->pertag->curtag - 1))) {
          119 +                        selmon->pertag->prevtag = selmon->pertag->curtag;
          120 +                        for (i=0; !(newtagset & 1 << i); i++) ;
          121 +                        selmon->pertag->curtag = i + 1;
          122 +                }
          123                  selmon->tagset[selmon->seltags] = newtagset;
          124 +
          125 +                /* apply settings for this view */
          126 +                selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag];
          127 +                selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag];
          128 +                selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
          129 +                selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
          130 +                selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1];
          131                  focus(NULL);
          132                  arrange(selmon);
          133          }
          134 @@ -2043,11 +2090,31 @@ updatewmhints(Client *c) {
          135  
          136  void
          137  view(const Arg *arg) {
          138 +        int i;
          139 +        unsigned int tmptag;
          140 +
          141          if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
          142                  return;
          143          selmon->seltags ^= 1; /* toggle sel tagset */
          144 -        if(arg->ui & TAGMASK)
          145 +        if(arg->ui & TAGMASK) {
          146 +                selmon->pertag->prevtag = selmon->pertag->curtag;
          147                  selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
          148 +                if(arg->ui == ~0)
          149 +                        selmon->pertag->curtag = 0;
          150 +                else {
          151 +                        for (i=0; !(arg->ui & 1 << i); i++) ;
          152 +                        selmon->pertag->curtag = i + 1;
          153 +                }
          154 +        } else {
          155 +                tmptag = selmon->pertag->prevtag;
          156 +                selmon->pertag->prevtag = selmon->pertag->curtag;
          157 +                selmon->pertag->curtag = tmptag;
          158 +        }
          159 +        selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag];
          160 +        selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag];
          161 +        selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
          162 +        selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
          163 +        selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1];
          164          focus(NULL);
          165          arrange(selmon);
          166  }