sites

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

commit 9f142f7284f1048cef3139ae1b3a396d8252a6de
parent a30f1e4947c67cfdde4aa094d45b54c571ef74c5
Author: Jack Bird <jack.bird@durham.ac.uk>
Date:   Mon,  2 Aug 2021 19:34:01 +0100

[dwm][patch][bartabgroups] Updated for 138b405

Diffstat:
Adwm.suckless.org/patches/bartabgroups/dwm-bartabgroups-20210802-138b405.diff | 187+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdwm.suckless.org/patches/bartabgroups/index.md | 2++
2 files changed, 189 insertions(+), 0 deletions(-)

diff --git a/dwm.suckless.org/patches/bartabgroups/dwm-bartabgroups-20210802-138b405.diff b/dwm.suckless.org/patches/bartabgroups/dwm-bartabgroups-20210802-138b405.diff @@ -0,0 +1,187 @@ +From 653c99b94cc780a2def9c7e50a87703156535f8b Mon Sep 17 00:00:00 2001 +From: Jack Bird <jack.bird@durham.ac.uk> +Date: Mon, 2 Aug 2021 18:50:02 +0100 +Subject: [PATCH] bartabgroups updated to work with 138b405 + +--- + config.def.h | 11 +++++ + dwm.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++----- + 2 files changed, 112 insertions(+), 11 deletions(-) + +diff --git a/config.def.h b/config.def.h +index a2ac963..82accf1 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -16,6 +16,8 @@ static const char *colors[][3] = { + /* fg bg border */ + [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, + [SchemeSel] = { col_gray4, col_cyan, col_cyan }, ++ [SchemeTabActive] = { col_gray2, col_gray3, col_gray2 }, ++ [SchemeTabInactive] = { col_gray1, col_gray3, col_gray1 } + }; + + /* tagging */ +@@ -37,6 +39,15 @@ static const int nmaster = 1; /* number of clients in master area */ + static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ + static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */ + ++/* Bartabgroups properties */ ++#define BARTAB_BORDERS 1 // 0 = off, 1 = on ++#define BARTAB_BOTTOMBORDER 1 // 0 = off, 1 = on ++#define BARTAB_TAGSINDICATOR 1 // 0 = off, 1 = on if >1 client/view tag, 2 = always on ++#define BARTAB_TAGSPX 5 // # pixels for tag grid boxes ++#define BARTAB_TAGSROWS 3 // # rows in tag grid (9 tags, e.g. 3x3) ++static void (*bartabmonfns[])(Monitor *) = { monocle /* , customlayoutfn */ }; ++static void (*bartabfloatfns[])(Monitor *) = { NULL /* , customlayoutfn */ }; ++ + static const Layout layouts[] = { + /* symbol arrange function */ + { "[]=", tile }, /* first entry is default */ +diff --git a/dwm.c b/dwm.c +index 5e4d494..1839a56 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -59,7 +59,7 @@ + + /* enums */ + enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ +-enum { SchemeNorm, SchemeSel }; /* color schemes */ ++enum { SchemeNorm, SchemeSel, SchemeTabActive, SchemeTabInactive }; /* color schemes */ + enum { NetSupported, NetWMName, NetWMState, NetWMCheck, + NetWMFullscreen, NetActiveWindow, NetWMWindowType, + NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */ +@@ -378,6 +378,98 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact) + return *x != c->x || *y != c->y || *w != c->w || *h != c->h; + } + ++void ++bartabdraw(Monitor *m, Client *c, int unused, int x, int w, int groupactive) { ++ if (!c) return; ++ int i, nclienttags = 0, nviewtags = 0; ++ ++ drw_setscheme(drw, scheme[ ++ m->sel == c ? SchemeSel : (groupactive ? SchemeTabActive: SchemeTabInactive) ++ ]); ++ drw_text(drw, x, 0, w, bh, lrpad / 2, c->name, 0); ++ ++ // Floating win indicator ++ if (c->isfloating) drw_rect(drw, x + 2, 2, 5, 5, 0, 0); ++ ++ // Optional borders between tabs ++ if (BARTAB_BORDERS) { ++ XSetForeground(drw->dpy, drw->gc, drw->scheme[ColBorder].pixel); ++ XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, 0, 1, bh); ++ XFillRectangle(drw->dpy, drw->drawable, drw->gc, x + w, 0, 1, bh); ++ } ++ ++ // Optional tags icons ++ for (i = 0; i < LENGTH(tags); i++) { ++ if ((m->tagset[m->seltags] >> i) & 1) { nviewtags++; } ++ if ((c->tags >> i) & 1) { nclienttags++; } ++ } ++ if (BARTAB_TAGSINDICATOR == 2 || nclienttags > 1 || nviewtags > 1) { ++ for (i = 0; i < LENGTH(tags); i++) { ++ drw_rect(drw, ++ ( x + w - 2 - ((LENGTH(tags) / BARTAB_TAGSROWS) * BARTAB_TAGSPX) ++ - (i % (LENGTH(tags)/BARTAB_TAGSROWS)) + ((i % (LENGTH(tags) / BARTAB_TAGSROWS)) * BARTAB_TAGSPX) ++ ), ++ ( 2 + ((i / (LENGTH(tags)/BARTAB_TAGSROWS)) * BARTAB_TAGSPX) ++ - ((i / (LENGTH(tags)/BARTAB_TAGSROWS))) ++ ), ++ BARTAB_TAGSPX, BARTAB_TAGSPX, (c->tags >> i) & 1, 0 ++ ); ++ } ++ } ++} ++ ++void ++battabclick(Monitor *m, Client *c, int passx, int x, int w, int unused) { ++ if (passx >= x && passx <= x + w) { ++ focus(c); ++ restack(selmon); ++ } ++} ++ ++void ++bartabcalculate( ++ Monitor *m, int offx, int sw, int passx, ++ void(*tabfn)(Monitor *, Client *, int, int, int, int) ++) { ++ Client *c; ++ int ++ i, clientsnmaster = 0, clientsnstack = 0, clientsnfloating = 0, ++ masteractive = 0, fulllayout = 0, floatlayout = 0, ++ x, w, tgactive; ++ ++ for (i = 0, c = m->clients; c; c = c->next) { ++ if (!ISVISIBLE(c)) continue; ++ if (c->isfloating) { clientsnfloating++; continue; } ++ if (m->sel == c) { masteractive = i < m->nmaster; } ++ if (i < m->nmaster) { clientsnmaster++; } else { clientsnstack++; } ++ i++; ++ } ++ for (i = 0; i < LENGTH(bartabfloatfns); i++) if (m ->lt[m->sellt]->arrange == bartabfloatfns[i]) { floatlayout = 1; break; } ++ for (i = 0; i < LENGTH(bartabmonfns); i++) if (m ->lt[m->sellt]->arrange == bartabmonfns[i]) { fulllayout = 1; break; } ++ for (c = m->clients, i = 0; c; c = c->next) { ++ if (!ISVISIBLE(c)) continue; ++ if (clientsnmaster + clientsnstack == 0 || floatlayout) { ++ x = offx + (((m->mw - offx - sw) / (clientsnmaster + clientsnstack + clientsnfloating)) * i); ++ w = (m->mw - offx - sw) / (clientsnmaster + clientsnstack + clientsnfloating); ++ tgactive = 1; ++ } else if (!c->isfloating && (fulllayout || ((clientsnmaster == 0) ^ (clientsnstack == 0)))) { ++ x = offx + (((m->mw - offx - sw) / (clientsnmaster + clientsnstack)) * i); ++ w = (m->mw - offx - sw) / (clientsnmaster + clientsnstack); ++ tgactive = 1; ++ } else if (i < m->nmaster && !c->isfloating) { ++ x = offx + ((((m->mw * m->mfact) - offx) /clientsnmaster) * i); ++ w = ((m->mw * m->mfact) - offx) / clientsnmaster; ++ tgactive = masteractive; ++ } else if (!c->isfloating) { ++ x = (m->mw * m->mfact) + ((((m->mw * (1 - m->mfact)) - sw) / clientsnstack) * (i - m->nmaster)); ++ w = ((m->mw * (1 - m->mfact)) - sw) / clientsnstack; ++ tgactive = !masteractive; ++ } else continue; ++ tabfn(m, c, passx, x, w, tgactive); ++ i++; ++ } ++} ++ + void + arrange(Monitor *m) + { +@@ -442,8 +534,8 @@ buttonpress(XEvent *e) + click = ClkLtSymbol; + else if (ev->x > selmon->ww - (int)TEXTW(stext)) + click = ClkStatusText; +- else +- click = ClkWinTitle; ++ else // Focus clicked tab bar item ++ bartabcalculate(selmon, x, TEXTW(stext) - lrpad + 2, ev->x, battabclick); + } else if ((c = wintoclient(ev->window))) { + focus(c); + restack(selmon); +@@ -729,15 +821,13 @@ drawbar(Monitor *m) + drw_setscheme(drw, scheme[SchemeNorm]); + x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + ++ // Draw bartabgroups ++ drw_rect(drw, x, 0, m->ww - tw - x, bh, 1, 1); + if ((w = m->ww - tw - x) > bh) { +- if (m->sel) { +- drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); +- drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); +- if (m->sel->isfloating) +- drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); +- } else { +- drw_setscheme(drw, scheme[SchemeNorm]); +- drw_rect(drw, x, 0, w, bh, 1, 1); ++ bartabcalculate(m, x, tw, -1, bartabdraw); ++ if (BARTAB_BOTTOMBORDER) { ++ drw_setscheme(drw, scheme[SchemeTabActive]); ++ drw_rect(drw, 0, bh - 1, m->ww, 1, 1, 0); + } + } + drw_map(drw, m->barwin, 0, 0, m->ww, bh); +-- +2.32.0 + diff --git a/dwm.suckless.org/patches/bartabgroups/index.md b/dwm.suckless.org/patches/bartabgroups/index.md @@ -25,6 +25,8 @@ and gaps patches in tile mode: ## Download * [dwm-bartabgroups-6.2.diff](dwm-bartabgroups-6.2.diff) (01/25/2020) +* [dwm-bartabgroups-20210802-138b405.diff](dwm-bartabgroups-20210802-138b405.diff) (02/08/2021) ## Author - Miles Alan (m@milesalan.com) +- Jack Bird (jack.bird@dur.ac.uk) (138b405 port)