summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rw-r--r--dwm.c49
-rw-r--r--patches.h6
3 files changed, 56 insertions, 2 deletions
diff --git a/README.md b/README.md
index 76a150b..3cd382a 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,9 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t
- [autostart](https://dwm.suckless.org/patches/autostart/)
- makes dwm run `~/.dwm/autostart_blocking.sh` and `~/.dwm/autostart.sh &` on startup
+ - [fancybar](https://dwm.suckless.org/patches/fancybar/)
+ - shows the titles of all visible windows in the status bar
+
- [pertag](https://dwm.suckless.org/patches/pertag/)
- adds nmaster, mfact, layouts and more per tag rather than per monitor
diff --git a/dwm.c b/dwm.c
index 62f6274..134334f 100644
--- a/dwm.c
+++ b/dwm.c
@@ -825,6 +825,10 @@ void
drawbar(Monitor *m)
{
int x, w, sw = 0;
+ #if FANCYBAR_PATCH
+ int tw, mw, ew = 0;
+ unsigned int n = 0;
+ #endif // FANCYBAR_PATCH
#if SYSTRAY_PATCH
int stw = 0;
#endif // SYSTRAY_PATCH
@@ -850,6 +854,10 @@ drawbar(Monitor *m)
}
for (c = m->clients; c; c = c->next) {
+ #if FANCYBAR_PATCH
+ if (ISVISIBLE(c))
+ n++;
+ #endif // FANCYBAR_PATCH
occ |= c->tags;
if (c->isurgent)
urg |= c->tags;
@@ -870,10 +878,46 @@ drawbar(Monitor *m)
x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
#if SYSTRAY_PATCH
- if ((w = m->ww - sw - stw - x) > bh) {
+ if ((w = m->ww - sw - stw - x) > bh)
#else
- if ((w = m->ww - sw - x) > bh) {
+ if ((w = m->ww - sw - x) > bh)
#endif // SYSTRAY_PATCH
+ {
+ #if FANCYBAR_PATCH
+ if (n > 0) {
+ tw = TEXTW(m->sel->name) + lrpad;
+ mw = (tw >= w || n == 1) ? 0 : (w - tw) / (n - 1);
+
+ i = 0;
+ for (c = m->clients; c; c = c->next) {
+ if (!ISVISIBLE(c) || c == m->sel)
+ continue;
+ tw = TEXTW(c->name);
+ if(tw < mw)
+ ew += (mw - tw);
+ else
+ i++;
+ }
+ if (i > 0)
+ mw += ew / i;
+
+ for (c = m->clients; c; c = c->next) {
+ if (!ISVISIBLE(c))
+ continue;
+ tw = MIN(m->sel == c ? w : mw, TEXTW(c->name));
+
+ drw_setscheme(drw, scheme[m->sel == c ? SchemeSel : SchemeNorm]);
+ if (tw > 0) /* trap special handling of 0 in drw_text */
+ drw_text(drw, x, 0, tw, bh, lrpad / 2, c->name, 0);
+ if (c->isfloating)
+ drw_rect(drw, x + boxs, boxs, boxw, boxw, c->isfixed, 0);
+ x += tw;
+ w -= tw;
+ }
+ }
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_rect(drw, x, 0, w, bh, 1, 1);
+ #else
if (m->sel) {
drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
@@ -883,6 +927,7 @@ drawbar(Monitor *m)
drw_setscheme(drw, scheme[SchemeNorm]);
drw_rect(drw, x, 0, w, bh, 1, 1);
}
+ #endif // FANCYBAR_PATCH
}
#if SYSTRAY_PATCH
drw_map(drw, m->barwin, 0, 0, m->ww - stw, bh);
diff --git a/patches.h b/patches.h
index 9ebacb1..4a61a3e 100644
--- a/patches.h
+++ b/patches.h
@@ -44,6 +44,12 @@
*/
#define AUTOSTART_PATCH 0
+/* This patch shows the titles of all visible windows in the status bar
+ * (as opposed to showing only the selected one).
+ * https://dwm.suckless.org/patches/fancybar/
+ */
+#define FANCYBAR_PATCH 0
+
/* The pertag patch adds nmaster, mfacts and layouts per tag rather
* than per monitor (default).
* https://dwm.suckless.org/patches/pertag/