commit 3d6fab1dd66c9b41b5735fe98f3de66279b9f566
Author: Miles Alan <[email protected]>
Date:   Mon Aug 17 21:58:40 2020 -0500

    [dwm][patch] clientindicators: Add new patch - draws client indicators in 
bar

diff --git 
a/dwm.suckless.org/patches/clientindicators/dwm-clientindicators-6.2.diff 
b/dwm.suckless.org/patches/clientindicators/dwm-clientindicators-6.2.diff
new file mode 100644
index 00000000..f2e9afb8
--- /dev/null
+++ 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 <[email protected]>
+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
new file mode 100644
index 00000000..852e6936
Binary files /dev/null and 
b/dwm.suckless.org/patches/clientindicators/dwm-clientindicators.png 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
new file mode 100644
index 00000000..d47b2fb7
--- /dev/null
+++ 
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 <[email protected]>
+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
new file mode 100644
index 00000000..099553f8
--- /dev/null
+++ 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 ([email protected])


Reply via email to