ipertag - dwm - dynamic window manager Err parazyd.org 70 hgit clone https://git.parazyd.org/dwm URL:https://git.parazyd.org/dwm parazyd.org 70 1Log /git/dwm/log.gph parazyd.org 70 1Files /git/dwm/files.gph parazyd.org 70 1Refs /git/dwm/refs.gph parazyd.org 70 1README /git/dwm/file/README.gph parazyd.org 70 1LICENSE /git/dwm/file/LICENSE.gph parazyd.org 70 i--- Err parazyd.org 70 1commit 05f6ab9ff69a4e8297a7d05f7fe463cd84c9ecbd /git/dwm/commit/05f6ab9ff69a4e8297a7d05f7fe463cd84c9ecbd.gph parazyd.org 70 1parent b43bd229c3efda95d18e7025c355beaa357caf5c /git/dwm/commit/b43bd229c3efda95d18e7025c355beaa357caf5c.gph parazyd.org 70 hAuthor: parazyd URL:mailto:parazyd@dyne.org parazyd.org 70 iDate: Sun, 24 Apr 2022 00:01:35 +0200 Err parazyd.org 70 i Err parazyd.org 70 ipertag Err parazyd.org 70 i Err parazyd.org 70 iDiffstat: Err parazyd.org 70 i M .gitignore | 2 ++ Err parazyd.org 70 i M dwm.c | 88 ++++++++++++++++++++++++++++--- Err parazyd.org 70 i Err parazyd.org 70 i2 files changed, 84 insertions(+), 6 deletions(-) Err parazyd.org 70 i--- Err parazyd.org 70 1diff --git a/.gitignore b/.gitignore /git/dwm/file/.gitignore.gph parazyd.org 70 i@@ -1,2 +1,4 @@ Err parazyd.org 70 i dwm Err parazyd.org 70 i *.o Err parazyd.org 70 i+*.orig Err parazyd.org 70 i+*.rej Err parazyd.org 70 1diff --git a/dwm.c b/dwm.c /git/dwm/file/dwm.c.gph parazyd.org 70 i@@ -111,6 +111,7 @@ typedef struct { Err parazyd.org 70 i void (*arrange)(Monitor *); Err parazyd.org 70 i } Layout; Err parazyd.org 70 i Err parazyd.org 70 i+typedef struct Pertag Pertag; Err parazyd.org 70 i struct Monitor { Err parazyd.org 70 i char ltsymbol[16]; Err parazyd.org 70 i float mfact; Err parazyd.org 70 i@@ -130,6 +131,7 @@ struct Monitor { Err parazyd.org 70 i Monitor *next; Err parazyd.org 70 i Window barwin; Err parazyd.org 70 i const Layout *lt[2]; Err parazyd.org 70 i+ Pertag *pertag; Err parazyd.org 70 i }; Err parazyd.org 70 i Err parazyd.org 70 i typedef struct { Err parazyd.org 70 i@@ -271,6 +273,15 @@ static Window root, wmcheckwin; Err parazyd.org 70 i /* configuration, allows nested code to access above variables */ Err parazyd.org 70 i #include "config.h" Err parazyd.org 70 i Err parazyd.org 70 i+struct Pertag { Err parazyd.org 70 i+ unsigned int curtag, prevtag; /* current and previous tag */ Err parazyd.org 70 i+ int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */ Err parazyd.org 70 i+ float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */ Err parazyd.org 70 i+ unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */ Err parazyd.org 70 i+ const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes */ Err parazyd.org 70 i+ int showbars[LENGTH(tags) + 1]; /* display bar for the current tag */ Err parazyd.org 70 i+}; Err parazyd.org 70 i+ Err parazyd.org 70 i /* compile-time check if all tags fit into an unsigned int bit array. */ Err parazyd.org 70 i struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; Err parazyd.org 70 i Err parazyd.org 70 i@@ -634,6 +645,7 @@ Monitor * Err parazyd.org 70 i createmon(void) Err parazyd.org 70 i { Err parazyd.org 70 i Monitor *m; Err parazyd.org 70 i+ unsigned int i; Err parazyd.org 70 i Err parazyd.org 70 i m = ecalloc(1, sizeof(Monitor)); Err parazyd.org 70 i m->tagset[0] = m->tagset[1] = 1; Err parazyd.org 70 i@@ -644,6 +656,20 @@ createmon(void) Err parazyd.org 70 i m->lt[0] = &layouts[0]; Err parazyd.org 70 i m->lt[1] = &layouts[1 % LENGTH(layouts)]; Err parazyd.org 70 i strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); Err parazyd.org 70 i+ m->pertag = ecalloc(1, sizeof(Pertag)); Err parazyd.org 70 i+ m->pertag->curtag = m->pertag->prevtag = 1; Err parazyd.org 70 i+ Err parazyd.org 70 i+ for (i = 0; i <= LENGTH(tags); i++) { Err parazyd.org 70 i+ m->pertag->nmasters[i] = m->nmaster; Err parazyd.org 70 i+ m->pertag->mfacts[i] = m->mfact; Err parazyd.org 70 i+ Err parazyd.org 70 i+ m->pertag->ltidxs[i][0] = m->lt[0]; Err parazyd.org 70 i+ m->pertag->ltidxs[i][1] = m->lt[1]; Err parazyd.org 70 i+ m->pertag->sellts[i] = m->sellt; Err parazyd.org 70 i+ Err parazyd.org 70 i+ m->pertag->showbars[i] = m->showbar; Err parazyd.org 70 i+ } Err parazyd.org 70 i+ Err parazyd.org 70 i return m; Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i@@ -980,7 +1006,7 @@ grabkeys(void) Err parazyd.org 70 i void Err parazyd.org 70 i incnmaster(const Arg *arg) Err parazyd.org 70 i { Err parazyd.org 70 i- selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); Err parazyd.org 70 i+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = MAX(selmon->nmaster + arg->i, 0); Err parazyd.org 70 i arrange(selmon); Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i@@ -1511,9 +1537,9 @@ void Err parazyd.org 70 i setlayout(const Arg *arg) Err parazyd.org 70 i { Err parazyd.org 70 i if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) Err parazyd.org 70 i- selmon->sellt ^= 1; Err parazyd.org 70 i+ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag] ^= 1; Err parazyd.org 70 i if (arg && arg->v) Err parazyd.org 70 i- selmon->lt[selmon->sellt] = (Layout *)arg->v; Err parazyd.org 70 i+ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *)arg->v; Err parazyd.org 70 i strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); Err parazyd.org 70 i if (selmon->sel) Err parazyd.org 70 i arrange(selmon); Err parazyd.org 70 i@@ -1532,7 +1558,7 @@ setmfact(const Arg *arg) Err parazyd.org 70 i f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; Err parazyd.org 70 i if (f < 0.05 || f > 0.95) Err parazyd.org 70 i return; Err parazyd.org 70 i- selmon->mfact = f; Err parazyd.org 70 i+ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f; Err parazyd.org 70 i arrange(selmon); Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i@@ -1753,7 +1779,7 @@ tile(Monitor *m) Err parazyd.org 70 i void Err parazyd.org 70 i togglebar(const Arg *arg) Err parazyd.org 70 i { Err parazyd.org 70 i- selmon->showbar = !selmon->showbar; Err parazyd.org 70 i+ selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = !selmon->showbar; Err parazyd.org 70 i updatebarpos(selmon); Err parazyd.org 70 i XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); Err parazyd.org 70 i arrange(selmon); Err parazyd.org 70 i@@ -1792,9 +1818,33 @@ void Err parazyd.org 70 i toggleview(const Arg *arg) Err parazyd.org 70 i { Err parazyd.org 70 i unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); Err parazyd.org 70 i+ int i; Err parazyd.org 70 i Err parazyd.org 70 i if (newtagset) { Err parazyd.org 70 i selmon->tagset[selmon->seltags] = newtagset; Err parazyd.org 70 i+ Err parazyd.org 70 i+ if (newtagset == ~0) { Err parazyd.org 70 i+ selmon->pertag->prevtag = selmon->pertag->curtag; Err parazyd.org 70 i+ selmon->pertag->curtag = 0; Err parazyd.org 70 i+ } Err parazyd.org 70 i+ Err parazyd.org 70 i+ /* test if the user did not select the same tag */ Err parazyd.org 70 i+ if (!(newtagset & 1 << (selmon->pertag->curtag - 1))) { Err parazyd.org 70 i+ selmon->pertag->prevtag = selmon->pertag->curtag; Err parazyd.org 70 i+ for (i = 0; !(newtagset & 1 << i); i++) ; Err parazyd.org 70 i+ selmon->pertag->curtag = i + 1; Err parazyd.org 70 i+ } Err parazyd.org 70 i+ Err parazyd.org 70 i+ /* apply settings for this view */ Err parazyd.org 70 i+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; Err parazyd.org 70 i+ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; Err parazyd.org 70 i+ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; Err parazyd.org 70 i+ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; Err parazyd.org 70 i+ selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; Err parazyd.org 70 i+ Err parazyd.org 70 i+ if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) Err parazyd.org 70 i+ togglebar(NULL); Err parazyd.org 70 i+ Err parazyd.org 70 i focus(NULL); Err parazyd.org 70 i arrange(selmon); Err parazyd.org 70 i } Err parazyd.org 70 i@@ -2091,11 +2141,37 @@ updatewmhints(Client *c) Err parazyd.org 70 i void Err parazyd.org 70 i view(const Arg *arg) Err parazyd.org 70 i { Err parazyd.org 70 i+ int i; Err parazyd.org 70 i+ unsigned int tmptag; Err parazyd.org 70 i+ Err parazyd.org 70 i if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) Err parazyd.org 70 i return; Err parazyd.org 70 i selmon->seltags ^= 1; /* toggle sel tagset */ Err parazyd.org 70 i- if (arg->ui & TAGMASK) Err parazyd.org 70 i+ if (arg->ui & TAGMASK) { Err parazyd.org 70 i selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; Err parazyd.org 70 i+ selmon->pertag->prevtag = selmon->pertag->curtag; Err parazyd.org 70 i+ Err parazyd.org 70 i+ if (arg->ui == ~0) Err parazyd.org 70 i+ selmon->pertag->curtag = 0; Err parazyd.org 70 i+ else { Err parazyd.org 70 i+ for (i = 0; !(arg->ui & 1 << i); i++) ; Err parazyd.org 70 i+ selmon->pertag->curtag = i + 1; Err parazyd.org 70 i+ } Err parazyd.org 70 i+ } else { Err parazyd.org 70 i+ tmptag = selmon->pertag->prevtag; Err parazyd.org 70 i+ selmon->pertag->prevtag = selmon->pertag->curtag; Err parazyd.org 70 i+ selmon->pertag->curtag = tmptag; Err parazyd.org 70 i+ } Err parazyd.org 70 i+ Err parazyd.org 70 i+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; Err parazyd.org 70 i+ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; Err parazyd.org 70 i+ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; Err parazyd.org 70 i+ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; Err parazyd.org 70 i+ selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; Err parazyd.org 70 i+ Err parazyd.org 70 i+ if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) Err parazyd.org 70 i+ togglebar(NULL); Err parazyd.org 70 i+ Err parazyd.org 70 i focus(NULL); Err parazyd.org 70 i arrange(selmon); Err parazyd.org 70 i } Err parazyd.org 70 .