Hi,

I updated the pertag patch for the current dwm tip (5.8.2) because i had a 
reject with the 5.7.2 version.

-- 
Julien Pecqueur (JPEC)

Site:   http://julienpecqueur.com
Email:  j...@julienpecqueur.com
PGP:    B1AA2389 (GNUPG)
IRC:    jpec (irc.freenode.net)

Powered by Archlinux - Keep it simple stupid !
diff -r cb309a6cea4b config.def.h
--- a/config.def.h      Wed Jun 02 18:24:24 2010 +0200
+++ b/config.def.h      Thu Jun 03 18:47:50 2010 +0200
@@ -14,11 +14,8 @@
 static const Bool showbar           = True;     /* False means no bar */
 static const Bool topbar            = True;     /* False means bottom bar */
 static const unsigned int barheight = 16;       /* Height of the status bar in 
px */
-static const int nmaster            = 2;        /* default number of clients 
in the master area */
 static const int padding            = 15;       /* Padding in monocle mode */
 
-#include "nmaster.c"
-
 /* tagging */
 static const char *tags[] = { "nil", "web", "work", "tasks" };
 
@@ -55,8 +52,6 @@
        { "[]=",      tile },    /* first entry is default */
        { "><>",      NULL },    /* no layout function means floating behavior 
*/
        { "[M]",      monocle },
-       { "-|=",      ntile },
-       { "-|-",      nbstack },
 };
 
 /* key definitions */
@@ -105,11 +100,6 @@
        { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
        { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
        { MODKEY|ShiftMask,             XK_q,      quit,           {0} },
-       { MODKEY,                       XK_a,      incnmaster,     {.i = +1 } },
-       { MODKEY,                       XK_z,      incnmaster,     {.i = -1 } },
-       { MODKEY,                       XK_x,      setnmaster,     {.i = 2 } },
-       { MODKEY,                       XK_w,      setlayout,      {.v = 
&layouts[4] } },
-       { MODKEY,                       XK_s,      setlayout,      {.v = 
&layouts[5] } },
        TAGKEYS(                        XK_1,                      0)
        TAGKEYS(                        XK_2,                      1)
        TAGKEYS(                        XK_3,                      2)
diff -r cb309a6cea4b dwm.c
--- a/dwm.c     Wed Jun 02 18:24:24 2010 +0200
+++ b/dwm.c     Thu Jun 03 18:47:50 2010 +0200
@@ -121,26 +121,6 @@
        void (*arrange)(Monitor *);
 } Layout;
 
-struct Monitor {
-       char ltsymbol[16];
-       float mfact;
-       int num;
-       int by;               /* bar geometry */
-       int mx, my, mw, mh;   /* screen size */
-       int wx, wy, ww, wh;   /* window area  */
-       unsigned int seltags;
-       unsigned int sellt;
-       unsigned int tagset[2];
-       Bool showbar;
-       Bool topbar;
-       Client *clients;
-       Client *sel;
-       Client *stack;
-       Monitor *next;
-       Window barwin;
-       const Layout *lt[2];
-};
-
 typedef struct {
        const char *class;
        const char *instance;
@@ -275,6 +255,31 @@
 /* configuration, allows nested code to access above variables */
 #include "config.h"
 
+struct Monitor {
+       char ltsymbol[16];
+       float mfact;
+       int num;
+       int by;               /* bar geometry */
+       int mx, my, mw, mh;   /* screen size */
+       int wx, wy, ww, wh;   /* window area  */
+       unsigned int seltags;
+       unsigned int sellt;
+       unsigned int tagset[2];
+       Bool showbar;
+       Bool topbar;
+       Client *clients;
+       Client *sel;
+       Client *stack;
+       Monitor *next;
+       Window barwin;
+       const Layout *lt[2];
+       int curtag;
+       int prevtag;
+       const Layout *lts[LENGTH(tags) + 1];
+       double mfacts[LENGTH(tags) + 1];
+       Bool showbars[LENGTH(tags) + 1];
+};
+
 /* compile-time check if all tags fit into an unsigned int bit array. */
 struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
 
@@ -1467,7 +1472,7 @@
        if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
                selmon->sellt ^= 1;
        if(arg && arg->v)
-               selmon->lt[selmon->sellt] = (Layout *)arg->v;
+               selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = 
(Layout *)arg->v;
        strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof 
selmon->ltsymbol);
        if(selmon->sel)
                arrange(selmon);
@@ -1485,13 +1490,15 @@
        f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
        if(f < 0.1 || f > 0.9)
                return;
-       selmon->mfact = f;
+       selmon->mfact = selmon->mfacts[selmon->curtag] = f;
        arrange(selmon);
 }
 
 void
 setup(void) {
        XSetWindowAttributes wa;
+       Monitor *m;
+       unsigned int i;
 
        /* clean up any zombies immediately */
        sigchld(0);
@@ -1527,7 +1534,27 @@
        XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
        if(!dc.font.set)
                XSetFont(dpy, dc.gc, dc.font.xfont->fid);
+       /* init tags */
+       for(m = mons; m; m = m->next)
+               m->curtag = m->prevtag = 1;
+       /* init mfacts */
+       for(m = mons; m; m = m->next) {
+               for(i=0; i < LENGTH(tags) + 1 ; i++) {
+                       m->mfacts[i] = m->mfact;
+               }
+       }
+       /* init layouts */
+       for(m = mons; m; m = m->next) {
+               for(i=0; i < LENGTH(tags) + 1; i++) {
+                       m->lts[i] = &layouts[0];
+               }
+       }
        /* init bars */
+       for(m = mons; m; m = m->next) {
+               for(i=0; i < LENGTH(tags) + 1; i++) {
+                       m->showbars[i] = m->showbar;
+               }
+       }
        updatebars();
        updatestatus();
        /* EWMH support per view */
@@ -1638,7 +1665,7 @@
 
 void
 togglebar(const Arg *arg) {
-       selmon->showbar = !selmon->showbar;
+       selmon->showbar = selmon->showbars[selmon->curtag] = !selmon->showbar;
        updatebarpos(selmon);
        XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, 
selmon->ww, bh);
        arrange(selmon);
@@ -1658,12 +1685,27 @@
 void
 toggletag(const Arg *arg) {
        unsigned int newtags;
+       unsigned int i;
 
        if(!selmon->sel)
                return;
        newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
        if(newtags) {
                selmon->sel->tags = newtags;
+               if(newtags == ~0) {
+                       selmon->prevtag = selmon->curtag;
+                       selmon->curtag = 0;
+               }
+               if(!(newtags & 1 << (selmon->curtag - 1))) {
+                       selmon->prevtag = selmon->curtag;
+                       for (i=0; !(newtags & 1 << i); i++);
+                       selmon->curtag = i + 1;
+               }
+               selmon->sel->tags = newtags;
+               selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
+               selmon->mfact = selmon->mfacts[selmon->curtag];
+               if (selmon->showbar != selmon->showbars[selmon->curtag])
+                       togglebar(NULL);
                arrange(selmon);
        }
 }
@@ -1930,11 +1972,29 @@
 
 void
 view(const Arg *arg) {
+       unsigned int i;
+
        if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
                return;
        selmon->seltags ^= 1; /* toggle sel tagset */
-       if(arg->ui & TAGMASK)
+       if(arg->ui & TAGMASK) {
                selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
+               selmon->prevtag = selmon->curtag;
+               if(arg->ui == ~0)
+                       selmon->curtag = 0;
+               else {
+                       for (i=0; !(arg->ui & 1 << i); i++);
+                       selmon->curtag = i + 1;
+               }
+       } else {
+               selmon->prevtag= selmon->curtag ^ selmon->prevtag;
+               selmon->curtag^= selmon->prevtag;
+               selmon->prevtag= selmon->curtag ^ selmon->prevtag;
+       }
+       selmon->lt[selmon->sellt]= selmon->lts[selmon->curtag];
+       selmon->mfact = selmon->mfacts[selmon->curtag];
+       if(selmon->showbar != selmon->showbars[selmon->curtag])
+               togglebar(NULL);
        arrange(selmon);
 }
 

Attachment: pgpHx95D0ExGM.pgp
Description: PGP signature

Reply via email to