From ec546d799575ee4bb0b99cedc17b56926a0dee0a Mon Sep 17 00:00:00 2001 From: bakkeby Date: Fri, 6 Sep 2019 23:47:06 +0200 Subject: [PATCH] Adding fancybar patch --- README.md | 3 +++ dwm.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- patches.h | 6 ++++++ 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/