sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 902eed804defe50c91b36d276cc507035e28ad7e
parent c52f049f9f9b5aa4a668d45f2a34e912a91a637f
Author: Aaron Duxler <aaron.duxler@gmail.com>
Date:   Sat, 18 Apr 2020 15:11:55 +0200

[dwm][pertag] pertag-perseltag-6.2 patch added

Diffstat:
Adwm.suckless.org/patches/pertag/dwm-pertag-perseltag-6.2.diff | 202+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdwm.suckless.org/patches/pertag/index.md | 7+++++++
2 files changed, 209 insertions(+), 0 deletions(-)

diff --git a/dwm.suckless.org/patches/pertag/dwm-pertag-perseltag-6.2.diff b/dwm.suckless.org/patches/pertag/dwm-pertag-perseltag-6.2.diff @@ -0,0 +1,202 @@ +diff -up a/dwm.c b/dwm.c +--- a/dwm.c 2020-04-17 13:37:50.926942626 +0200 ++++ b/dwm.c 2020-04-17 13:44:30.578373509 +0200 +@@ -111,6 +111,7 @@ typedef struct { + void (*arrange)(Monitor *); + } Layout; + ++typedef struct Pertag Pertag; + struct Monitor { + char ltsymbol[16]; + float mfact; +@@ -130,6 +131,7 @@ struct Monitor { + Monitor *next; + Window barwin; + const Layout *lt[2]; ++ Pertag *pertag; + }; + + typedef struct { +@@ -271,6 +273,15 @@ static Window root, wmcheckwin; + /* configuration, allows nested code to access above variables */ + #include "config.h" + ++struct Pertag { ++ unsigned int curtag, prevtag; /* current and previous tag */ ++ int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */ ++ float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */ ++ unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */ ++ const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes */ ++ int showbars[LENGTH(tags) + 1]; /* display bar for the current tag */ ++}; ++ + /* compile-time check if all tags fit into an unsigned int bit array. */ + struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; + +@@ -631,6 +642,7 @@ Monitor * + createmon(void) + { + Monitor *m; ++ unsigned int i; + + m = ecalloc(1, sizeof(Monitor)); + m->tagset[0] = m->tagset[1] = 1; +@@ -641,6 +653,20 @@ createmon(void) + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); ++ m->pertag = ecalloc(1, sizeof(Pertag)); ++ m->pertag->curtag = m->pertag->prevtag = 1; ++ ++ for (i = 0; i <= LENGTH(tags); i++) { ++ m->pertag->nmasters[i] = m->nmaster; ++ m->pertag->mfacts[i] = m->mfact; ++ ++ m->pertag->ltidxs[i][0] = m->lt[0]; ++ m->pertag->ltidxs[i][1] = m->lt[1]; ++ m->pertag->sellts[i] = m->sellt; ++ ++ m->pertag->showbars[i] = m->showbar; ++ } ++ + return m; + } + +@@ -966,7 +992,11 @@ grabkeys(void) + void + incnmaster(const Arg *arg) + { ++ unsigned int i; + selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); ++ for(i=0; i<=LENGTH(tags); ++i) ++ if(selmon->tagset[selmon->seltags] & 1<<i) ++ selmon->pertag->nmasters[(i+1)%LENGTH(tags)] = selmon->nmaster; + arrange(selmon); + } + +@@ -1500,11 +1530,20 @@ setfullscreen(Client *c, int fullscreen) + void + setlayout(const Arg *arg) + { ++ unsigned int i; + if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) + selmon->sellt ^= 1; + if (arg && arg->v) + selmon->lt[selmon->sellt] = (Layout *)arg->v; + strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); ++ ++ for(i=0; i<=LENGTH(tags); ++i) ++ if(selmon->tagset[selmon->seltags] & 1<<i) ++ { ++ selmon->pertag->ltidxs[(i+1)%LENGTH(tags)][selmon->sellt] = selmon->lt[selmon->sellt]; ++ selmon->pertag->sellts[(i+1)%LENGTH(tags)] = selmon->sellt; ++ } ++ + if (selmon->sel) + arrange(selmon); + else +@@ -1516,13 +1555,19 @@ void + setmfact(const Arg *arg) + { + float f; ++ unsigned int i; + + if (!arg || !selmon->lt[selmon->sellt]->arrange) + return; + f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; ++ if (arg->f == 0.0) ++ f = mfact; + if (f < 0.1 || f > 0.9) + return; + selmon->mfact = f; ++ for(i=0; i<=LENGTH(tags); ++i) ++ if(selmon->tagset[selmon->seltags] & 1<<i) ++ selmon->pertag->mfacts[(i+1)%LENGTH(tags)] = f; + arrange(selmon); + } + +@@ -1699,7 +1744,11 @@ tile(Monitor *m) + void + togglebar(const Arg *arg) + { ++ unsigned int i; + selmon->showbar = !selmon->showbar; ++ for(i=0; i<=LENGTH(tags); ++i) ++ if(selmon->tagset[selmon->seltags] & 1<<i) ++ selmon->pertag->showbars[(i+1)%LENGTH(tags)] = selmon->showbar; + updatebarpos(selmon); + XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); + arrange(selmon); +@@ -1738,9 +1787,33 @@ void + toggleview(const Arg *arg) + { + unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); ++ int i; + + if (newtagset) { + selmon->tagset[selmon->seltags] = newtagset; ++ ++ if (newtagset == ~0) { ++ selmon->pertag->prevtag = selmon->pertag->curtag; ++ selmon->pertag->curtag = 0; ++ } ++ ++ /* test if the user did not select the same tag */ ++ if (!(newtagset & 1 << (selmon->pertag->curtag - 1))) { ++ selmon->pertag->prevtag = selmon->pertag->curtag; ++ for (i = 0; !(newtagset & 1 << i); i++) ; ++ selmon->pertag->curtag = i + 1; ++ } ++ ++ /* apply settings for this view */ ++ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; ++ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; ++ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; ++ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; ++ selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; ++ ++ if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) ++ togglebar(NULL); ++ + focus(NULL); + arrange(selmon); + } +@@ -2035,11 +2108,37 @@ updatewmhints(Client *c) + void + view(const Arg *arg) + { ++ int i; ++ unsigned int tmptag; ++ + 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->pertag->prevtag = selmon->pertag->curtag; ++ ++ if (arg->ui == ~0) ++ selmon->pertag->curtag = 0; ++ else { ++ for (i = 0; !(arg->ui & 1 << i); i++) ; ++ selmon->pertag->curtag = i + 1; ++ } ++ } else { ++ tmptag = selmon->pertag->prevtag; ++ selmon->pertag->prevtag = selmon->pertag->curtag; ++ selmon->pertag->curtag = tmptag; ++ } ++ ++ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; ++ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; ++ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; ++ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; ++ selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; ++ ++ if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) ++ togglebar(NULL); ++ + focus(NULL); + arrange(selmon); + } diff --git a/dwm.suckless.org/patches/pertag/index.md b/dwm.suckless.org/patches/pertag/index.md @@ -24,6 +24,12 @@ Download * [dwm-6.0-pertag\_without\_bar.diff](dwm-6.0-pertag_without_bar.diff) (5578b) (20140530) * [dwm-5.8.2-pertag\_without\_bar.diff](dwm-5.8.2-pertag_without_bar.diff) +* Pertag, but with this patch changes apply to all selected tags.<br/> + For exmaple: If tag 2 and tag 3 are selected, changes to barpos, lyaout, mfact, nmaster will apply to both tags.<br/> + With the original pertag patch, changes only effect one of the selected tags. + * [dwm-pertag-perseltag-6.2.diff](dwm-pertag-perseltag-6.2.diff) (20200418) + + Authors ------- * Jan Christoph Ebersbach - <jceb@e-jc.de> @@ -35,3 +41,4 @@ Authors * Updated by Ivan Tham - `pickfire at riseup dot net` * [Jochen Sprickerhof](mailto:project@firstname.lastname.de) (Updated to current git) * Lucas Gabriel Vuotto - <lvuotto92@gmail.com> (git ports) +* Aaron Duxler - `aaron@duxler.xyz` (dwm-pertag-perseltag-6.2)