commit 3d6fab1dd66c9b41b5735fe98f3de66279b9f566
parent d10f6bc1d0b2ea2e073d743b4334c556eab12595
Author: Miles Alan <m@milesalan.com>
Date: Mon, 17 Aug 2020 21:58:40 -0500
[dwm][patch] clientindicators: Add new patch - draws client indicators in bar
Diffstat:
4 files changed, 155 insertions(+), 0 deletions(-)
diff --git a/dwm.suckless.org/patches/clientindicators/dwm-clientindicators-6.2.diff b/dwm.suckless.org/patches/clientindicators/dwm-clientindicators-6.2.diff
@@ -0,0 +1,48 @@
+From 8c72f9ea7c9cd8d254b52a4f7059113c41483597 Mon Sep 17 00:00:00 2001
+From: Miles Alan <m@milesalan.com>
+Date: Mon, 17 Aug 2020 20:33:45 -0500
+Subject: [PATCH] Draws a dot indicator overlayed on each tag icon for each
+ client. The selected client is drawn as a larger horizontal line.
+
+---
+ dwm.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/dwm.c b/dwm.c
+index 4465af1..e0ca438 100644
+--- a/dwm.c
++++ b/dwm.c
+@@ -695,6 +695,7 @@ dirtomon(int dir)
+ void
+ drawbar(Monitor *m)
+ {
++ int indn;
+ int x, w, sw = 0;
+ int boxs = drw->fonts->h / 9;
+ int boxw = drw->fonts->h / 6 + 2;
+@@ -715,13 +716,18 @@ drawbar(Monitor *m)
+ }
+ x = 0;
+ for (i = 0; i < LENGTH(tags); i++) {
++ indn = 0;
+ w = TEXTW(tags[i]);
+ drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
+- if (occ & 1 << i)
+- drw_rect(drw, x + boxs, boxs, boxw, boxw,
+- m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
+- urg & 1 << i);
++
++ for (c = m->clients; c; c = c->next) {
++ if (c->tags & (1 << i)) {
++ drw_rect(drw, x, 1 + (indn * 2), selmon->sel == c ? 6 : 1, 1, 1, urg & 1 << i);
++ indn++;
++ }
++ }
++
+ x += w;
+ }
+ w = blw = TEXTW(m->ltsymbol);
+--
+2.25.4
+
diff --git a/dwm.suckless.org/patches/clientindicators/dwm-clientindicators.png b/dwm.suckless.org/patches/clientindicators/dwm-clientindicators.png
Binary files differ.
diff --git a/dwm.suckless.org/patches/clientindicators/dwm-clientindicatorshidevacant-6.2.diff b/dwm.suckless.org/patches/clientindicators/dwm-clientindicatorshidevacant-6.2.diff
@@ -0,0 +1,88 @@
+From 166fe643c650defe3b9b18367969dd1359775e0b Mon Sep 17 00:00:00 2001
+From: Miles Alan <m@milesalan.com>
+Date: Mon, 17 Aug 2020 21:46:14 -0500
+Subject: [PATCH] Combination of the clientindicators & hidevacant patches
+
+The clientindicator patch draws a dot indicator overlayed on each tag icon
+for each client. The selected client is drawn as a larger horizontal line.
+
+The hidevacant patch hides tags which have no clients.
+---
+ dwm.c | 31 +++++++++++++++++++++++--------
+ 1 file changed, 23 insertions(+), 8 deletions(-)
+
+diff --git a/dwm.c b/dwm.c
+index 4465af1..969b129 100644
+--- a/dwm.c
++++ b/dwm.c
+@@ -416,7 +416,7 @@ attachstack(Client *c)
+ void
+ buttonpress(XEvent *e)
+ {
+- unsigned int i, x, click;
++ unsigned int i, x, click, occ = 0;
+ Arg arg = {0};
+ Client *c;
+ Monitor *m;
+@@ -431,9 +431,14 @@ buttonpress(XEvent *e)
+ }
+ if (ev->window == selmon->barwin) {
+ i = x = 0;
+- do
++ for (c = m->clients; c; c = c->next)
++ occ |= c->tags == 255 ? 0 : c->tags;
++ do {
++ /* do not reserve space for vacant tags */
++ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
++ continue;
+ x += TEXTW(tags[i]);
+- while (ev->x >= x && ++i < LENGTH(tags));
++ } while (ev->x >= x && ++i < LENGTH(tags));
+ if (i < LENGTH(tags)) {
+ click = ClkTagBar;
+ arg.ui = 1 << i;
+@@ -695,6 +700,7 @@ dirtomon(int dir)
+ void
+ drawbar(Monitor *m)
+ {
++ int indn;
+ int x, w, sw = 0;
+ int boxs = drw->fonts->h / 9;
+ int boxw = drw->fonts->h / 6 + 2;
+@@ -709,19 +715,28 @@ drawbar(Monitor *m)
+ }
+
+ for (c = m->clients; c; c = c->next) {
+- occ |= c->tags;
++ occ |= c->tags == 255 ? 0 : c->tags;
+ if (c->isurgent)
+ urg |= c->tags;
+ }
+ x = 0;
+ for (i = 0; i < LENGTH(tags); i++) {
++ /* do not draw vacant tags */
++ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
++ continue;
++
++ indn = 0;
+ w = TEXTW(tags[i]);
+ drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
+- if (occ & 1 << i)
+- drw_rect(drw, x + boxs, boxs, boxw, boxw,
+- m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
+- urg & 1 << i);
++
++ for (c = m->clients; c; c = c->next) {
++ if (c->tags & (1 << i)) {
++ drw_rect(drw, x, 1 + (indn * 2), selmon->sel == c ? 6 : 1, 1, 1, urg & 1 << i);
++ indn++;
++ }
++ }
++
+ x += w;
+ }
+ w = blw = TEXTW(m->ltsymbol);
+--
+2.25.4
+
diff --git a/dwm.suckless.org/patches/clientindicators/index.md b/dwm.suckless.org/patches/clientindicators/index.md
@@ -0,0 +1,19 @@
+# clientindicators
+
+This patch draws a dot indicator overlayed on each tag icon for each
+client. The selected client is drawn as a larger horizontal line. This
+may help the user get a quick overview of how many open clients they have
+on which tags.
+
+The clientindicatorshidevacant version of this patch combines
+the functionality of the clientindicators patch with the
+[hide vacant tags](/patches/hide_vacant_tags) patch.
+
+![screenshot](dwm-clientindicators.png)
+
+## Download
+* [dwm-clientindicators-6.2.diff](dwm-clientindicators-6.2.diff) (2020-08-17)
+* [dwm-clientindicatorshidevacant-6.2.diff](dwm-clientindicatorshidevacant-6.2.diff) (2020-08-17)
+
+## Author
+- Miles Alan (m@milesalan.com)