URI: 
       dwm-5.8.2-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-5.8.2-pertag_without_bar.diff (4342B)
       ---
            1 diff --git a/dwm.c b/dwm.c
            2 --- a/dwm.c
            3 +++ b/dwm.c
            4 @@ -122,26 +122,6 @@ typedef struct {
            5          void (*arrange)(Monitor *);
            6  } Layout;
            7  
            8 -struct Monitor {
            9 -        char ltsymbol[16];
           10 -        float mfact;
           11 -        int num;
           12 -        int by;               /* bar geometry */
           13 -        int mx, my, mw, mh;   /* screen size */
           14 -        int wx, wy, ww, wh;   /* window area  */
           15 -        unsigned int seltags;
           16 -        unsigned int sellt;
           17 -        unsigned int tagset[2];
           18 -        Bool showbar;
           19 -        Bool topbar;
           20 -        Client *clients;
           21 -        Client *sel;
           22 -        Client *stack;
           23 -        Monitor *next;
           24 -        Window barwin;
           25 -        const Layout *lt[2];
           26 -};
           27 -
           28  typedef struct {
           29          const char *class;
           30          const char *instance;
           31 @@ -278,6 +258,30 @@ static Window root;
           32  /* configuration, allows nested code to access above variables */
           33  #include "config.h"
           34  
           35 +struct Monitor {
           36 +        char ltsymbol[16];
           37 +        float mfact;
           38 +        int num;
           39 +        int by;               /* bar geometry */
           40 +        int mx, my, mw, mh;   /* screen size */
           41 +        int wx, wy, ww, wh;   /* window area  */
           42 +        unsigned int seltags;
           43 +        unsigned int sellt;
           44 +        unsigned int tagset[2];
           45 +        Bool showbar;
           46 +        Bool topbar;
           47 +        Client *clients;
           48 +        Client *sel;
           49 +        Client *stack;
           50 +        Monitor *next;
           51 +        Window barwin;
           52 +        const Layout *lt[2];
           53 +        int curtag;
           54 +        int prevtag;
           55 +        const Layout *lts[LENGTH(tags) + 1];
           56 +        double mfacts[LENGTH(tags) + 1];
           57 +};
           58 +
           59  /* compile-time check if all tags fit into an unsigned int bit array. */
           60  struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
           61  
           62 @@ -609,6 +613,7 @@ configurerequest(XEvent *e) {
           63  Monitor *
           64  createmon(void) {
           65          Monitor *m;
           66 +        unsigned int i;
           67  
           68          if(!(m = (Monitor *)calloc(1, sizeof(Monitor))))
           69                  die("fatal: could not malloc() %u bytes\n", sizeof(Monitor));
           70 @@ -619,6 +624,14 @@ createmon(void) {
           71          m->lt[0] = &layouts[0];
           72          m->lt[1] = &layouts[1 % LENGTH(layouts)];
           73          strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
           74 +
           75 +        /* pertag init */
           76 +        m->curtag = m->prevtag = 1;
           77 +        for(i=0; i < LENGTH(tags) + 1 ; i++) {
           78 +                m->mfacts[i] = mfact;
           79 +                m->lts[i] = &layouts[0];
           80 +        }
           81 +
           82          return m;
           83  }
           84  
           85 @@ -1486,7 +1499,7 @@ setlayout(const Arg *arg) {
           86          if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
           87                  selmon->sellt ^= 1;
           88          if(arg && arg->v)
           89 -                selmon->lt[selmon->sellt] = (Layout *)arg->v;
           90 +                selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *)arg->v;
           91          strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
           92          if(selmon->sel)
           93                  arrange(selmon);
           94 @@ -1504,7 +1517,7 @@ setmfact(const Arg *arg) {
           95          f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
           96          if(f < 0.1 || f > 0.9)
           97                  return;
           98 -        selmon->mfact = f;
           99 +        selmon->mfact = selmon->mfacts[selmon->curtag] = f;
          100          arrange(selmon);
          101  }
          102  
          103 @@ -1547,7 +1560,6 @@ setup(void) {
          104          XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
          105          if(!dc.font.set)
          106                  XSetFont(dpy, dc.gc, dc.font.xfont->fid);
          107 -        /* init bars */
          108          updatebars();
          109          updatestatus();
          110          /* EWMH support per view */
          111 @@ -1678,12 +1690,25 @@ togglefloating(const Arg *arg) {
          112  void
          113  toggletag(const Arg *arg) {
          114          unsigned int newtags;
          115 +        unsigned int i;
          116  
          117          if(!selmon->sel)
          118                  return;
          119          newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
          120          if(newtags) {
          121                  selmon->sel->tags = newtags;
          122 +                if(newtags == ~0) {
          123 +                        selmon->prevtag = selmon->curtag;
          124 +                        selmon->curtag = 0;
          125 +                }
          126 +                if(!(newtags & 1 << (selmon->curtag - 1))) {
          127 +                        selmon->prevtag = selmon->curtag;
          128 +                        for (i=0; !(newtags & 1 << i); i++);
          129 +                        selmon->curtag = i + 1;
          130 +                }
          131 +                selmon->sel->tags = newtags;
          132 +                selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
          133 +                selmon->mfact = selmon->mfacts[selmon->curtag];
          134                  arrange(selmon);
          135          }
          136  }
          137 @@ -1950,11 +1975,27 @@ updatewmhints(Client *c) {
          138  
          139  void
          140  view(const Arg *arg) {
          141 +        unsigned int i;
          142 +
          143          if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
          144                  return;
          145          selmon->seltags ^= 1; /* toggle sel tagset */
          146 -        if(arg->ui & TAGMASK)
          147 +        if(arg->ui & TAGMASK) {
          148                  selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
          149 +                selmon->prevtag = selmon->curtag;
          150 +                if(arg->ui == ~0)
          151 +                        selmon->curtag = 0;
          152 +                else {
          153 +                        for (i=0; !(arg->ui & 1 << i); i++);
          154 +                        selmon->curtag = i + 1;
          155 +                }
          156 +        } else {
          157 +                selmon->prevtag= selmon->curtag ^ selmon->prevtag;
          158 +                selmon->curtag^= selmon->prevtag;
          159 +                selmon->prevtag= selmon->curtag ^ selmon->prevtag;
          160 +        }
          161 +        selmon->lt[selmon->sellt]= selmon->lts[selmon->curtag];
          162 +        selmon->mfact = selmon->mfacts[selmon->curtag];
          163          arrange(selmon);
          164  }
          165