diff options
author | Vidhu Kant Sharma <vidhukant@vidhukant.com> | 2025-05-10 20:13:39 +0530 |
---|---|---|
committer | Vidhu Kant Sharma <vidhukant@vidhukant.com> | 2025-05-10 20:13:39 +0530 |
commit | 7b54c80ec7c930598cfc44115bd710210298f6b8 (patch) | |
tree | 7c8f5f44d5a10cb853b859f22b309620e7dc4bca | |
parent | 64662eac26b1e6338c2980e57022f49e84907b7e (diff) |
patched dwm-barconfig-6.3.diff
-rw-r--r-- | config.def.h | 4 | ||||
-rw-r--r-- | dwm.c | 156 | ||||
-rw-r--r-- | patches/dwm-barconfig-6.3.diff | 183 |
3 files changed, 303 insertions, 40 deletions
diff --git a/config.def.h b/config.def.h index a2e11d9..e784ab4 100644 --- a/config.def.h +++ b/config.def.h @@ -2,7 +2,8 @@ static const unsigned int borderpx = 2; static const unsigned int snap = 32; static const int showbar = 1; static const int topbar = 1; -static const int user_bh = 32; +static const char *barlayout = "sn|lt"; +static const int user_bh = 30; static const char *fonts[] = { "Noto Sans CJK JP:size=14" }; static const unsigned int gappx = 8; static const char *colors[][3] = { @@ -138,4 +139,3 @@ static const Button buttons[] = { { ClkTagBar, MODKEY, Button1, tag, {0} }, { ClkTagBar, MODKEY, Button3, toggletag, {0} }, }; - @@ -704,53 +704,133 @@ dirtomon(int dir) void drawbar(Monitor *m) { - int x, w, tw = 0; + int x = 0, w, tw = 0, moveright = 0; int boxs = drw->fonts->h / 9; int boxw = drw->fonts->h / 6 + 2; - unsigned int i, occ = 0, urg = 0; + unsigned int i, j, occ = 0, urg = 0; Client *c; if (!m->showbar) return; + if (barlayout[0] == '\0') + barlayout = "tln|s"; /* draw status first so it can be overdrawn by tags later */ - if (m == selmon) { /* status is only drawn on selected monitor */ - drw_setscheme(drw, scheme[SchemeNorm]); - tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ - drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); - } - - for (c = m->clients; c; c = c->next) { - occ |= c->tags; - if (c->isurgent) - urg |= c->tags; - } - x = 0; - for (i = 0; i < LENGTH(tags); i++) { - 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); - x += w; - } - w = TEXTW(m->ltsymbol); + //if (m == selmon) { /* status is only drawn on selected monitor */ + // drw_setscheme(drw, scheme[SchemeNorm]); + // tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ + // drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); + //} + + //for (c = m->clients; c; c = c->next) { + // occ |= c->tags; + // if (c->isurgent) + // urg |= c->tags; + //} + //x = 0; + //for (i = 0; i < LENGTH(tags); i++) { + // 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); + // x += w; + //} + //w = TEXTW(m->ltsymbol); drw_setscheme(drw, scheme[SchemeNorm]); - x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); - - 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); - } - } + //x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + + //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); + // } + //} + + drw_text(drw, 0, 0, m->ww, bh, 0, "", 0); /* draw background */ + + for (i = 0; i < strlen(barlayout); i++) { + switch (barlayout[i]) { + case 'l': + w = /*blw =*/ TEXTW(m->ltsymbol); + drw_setscheme(drw, scheme[SchemeNorm]); + if (moveright) { + x -= w; + drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + } else + x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + break; + + case 'n': + tw = TEXTW(m->sel->name); + if (moveright) + x -= tw; + if (m->sel) { + drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); + drw_text(drw, x, 0, moveright ? tw : m->ww, 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, tw, bh, 1, 1); + } + if (!moveright) + x += tw; + break; + + case 's': + if (m == selmon) { /* status is only drawn on selected monitor */ + drw_setscheme(drw, scheme[SchemeNorm]); + tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ + if (moveright) { + x -= tw; + drw_text(drw, x, 0, tw, bh, 0, stext, 0); + } else + x = drw_text(drw, x, 0, tw, bh, 0, stext, 0); + } + break; + + case 't': + for (c = m->clients; c; c = c->next) { + occ |= c->tags; + if (c->isurgent) + urg |= c->tags; + } + /* tags */ + if (moveright) { + tw = 0; + for (j = 0; j < LENGTH(tags); j++) { + tw += TEXTW(tags[j]); + } + x -= tw; + } + for (j = 0; j < LENGTH(tags); j++) { + w = TEXTW(tags[j]); + drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << j ? SchemeSel : SchemeNorm]); + drw_text(drw, x, 0, w, bh, lrpad / 2, tags[j], urg & 1 << j); + if (occ & 1 << j) + drw_rect(drw, x + boxs, boxs, boxw, boxw, + m == selmon && selmon->sel && selmon->sel->tags & 1 << j, + urg & 1 << i); + x += w; + } + if (moveright) + x -= tw; + break; + + case '|': + moveright = 1; + x = m->ww; + break; + } + } drw_map(drw, m->barwin, 0, 0, m->ww, bh); } diff --git a/patches/dwm-barconfig-6.3.diff b/patches/dwm-barconfig-6.3.diff new file mode 100644 index 0000000..bc0ce2e --- /dev/null +++ b/patches/dwm-barconfig-6.3.diff @@ -0,0 +1,183 @@ +From 711d36b37cc3d27b23241bb3d66addb1e169082a Mon Sep 17 00:00:00 2001 +From: Dylan Cairns-Howarth <dairnarth@dylancairns.co.uk> +Date: Tue, 22 Feb 2022 07:24:52 +0000 +Subject: [PATCH] Allow bar order to be configured in config.h + +This patch adds char *barlayout to config(.def).h which can contain as +many or as few of the characters 'l', 'n', 's', 't', or '|' to configure +the order of dwm's bar. + + l Layout indicator; + n Window name; + s Status (set with xsetroot); + t Tag indicators; + | Split point. + +Everything before '|' (and if it is omitted) will appear on the left of +the bar. Everything after will appear on the right, but in reverse +order. + +By default, this patch leaves the bar as is. +--- + config.def.h | 2 +- + dwm.c | 117 +++++++++++++++++++++++++++++++++++---------------- + 2 files changed, 81 insertions(+), 38 deletions(-) + +diff --git a/config.def.h b/config.def.h +index a2ac963..260799e 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -5,6 +5,7 @@ static const unsigned int borderpx = 1; /* border pixel of windows */ + static const unsigned int snap = 32; /* snap pixel */ + static const int showbar = 1; /* 0 means no bar */ + static const int topbar = 1; /* 0 means bottom bar */ ++static const char *barlayout = "tln|s"; + static const char *fonts[] = { "monospace:size=10" }; + static const char dmenufont[] = "monospace:size=10"; + static const char col_gray1[] = "#222222"; +@@ -113,4 +114,3 @@ static Button buttons[] = { + { ClkTagBar, MODKEY, Button1, tag, {0} }, + { ClkTagBar, MODKEY, Button3, toggletag, {0} }, + }; +- +diff --git a/dwm.c b/dwm.c +index a96f33c..edbce8d 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -696,53 +696,96 @@ dirtomon(int dir) + void + drawbar(Monitor *m) + { +- int x, w, tw = 0; ++ int x = 0, w, tw = 0, moveright = 0; + int boxs = drw->fonts->h / 9; + int boxw = drw->fonts->h / 6 + 2; +- unsigned int i, occ = 0, urg = 0; ++ unsigned int i, j, occ = 0, urg = 0; + Client *c; + + if (!m->showbar) + return; ++ if (barlayout[0] == '\0') ++ barlayout = "tln|s"; + +- /* draw status first so it can be overdrawn by tags later */ +- if (m == selmon) { /* status is only drawn on selected monitor */ +- drw_setscheme(drw, scheme[SchemeNorm]); +- tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ +- drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); +- } +- +- for (c = m->clients; c; c = c->next) { +- occ |= c->tags; +- if (c->isurgent) +- urg |= c->tags; +- } +- x = 0; +- for (i = 0; i < LENGTH(tags); i++) { +- 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); +- x += w; +- } +- w = blw = TEXTW(m->ltsymbol); + drw_setscheme(drw, scheme[SchemeNorm]); +- x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); +- +- 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); ++ drw_text(drw, 0, 0, m->ww, bh, 0, "", 0); /* draw background */ ++ ++ for (i = 0; i < strlen(barlayout); i++) { ++ switch (barlayout[i]) { ++ case 'l': ++ w = blw = TEXTW(m->ltsymbol); ++ drw_setscheme(drw, scheme[SchemeNorm]); ++ if (moveright) { ++ x -= w; ++ drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); ++ } else ++ x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); ++ break; ++ ++ case 'n': ++ tw = TEXTW(m->sel->name); ++ if (moveright) ++ x -= tw; ++ if (m->sel) { ++ drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); ++ drw_text(drw, x, 0, moveright ? tw : m->ww, 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, tw, bh, 1, 1); ++ } ++ if (!moveright) ++ x += tw; ++ break; ++ ++ case 's': ++ if (m == selmon) { /* status is only drawn on selected monitor */ ++ drw_setscheme(drw, scheme[SchemeNorm]); ++ tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ ++ if (moveright) { ++ x -= tw; ++ drw_text(drw, x, 0, tw, bh, 0, stext, 0); ++ } else ++ x = drw_text(drw, x, 0, tw, bh, 0, stext, 0); ++ } ++ break; ++ ++ case 't': ++ for (c = m->clients; c; c = c->next) { ++ occ |= c->tags; ++ if (c->isurgent) ++ urg |= c->tags; ++ } ++ /* tags */ ++ if (moveright) { ++ tw = 0; ++ for (j = 0; j < LENGTH(tags); j++) { ++ tw += TEXTW(tags[j]); ++ } ++ x -= tw; ++ } ++ for (j = 0; j < LENGTH(tags); j++) { ++ w = TEXTW(tags[j]); ++ drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << j ? SchemeSel : SchemeNorm]); ++ drw_text(drw, x, 0, w, bh, lrpad / 2, tags[j], urg & 1 << j); ++ if (occ & 1 << j) ++ drw_rect(drw, x + boxs, boxs, boxw, boxw, ++ m == selmon && selmon->sel && selmon->sel->tags & 1 << j, ++ urg & 1 << i); ++ x += w; ++ } ++ if (moveright) ++ x -= tw; ++ break; ++ ++ case '|': ++ moveright = 1; ++ x = m->ww; ++ break; + } + } ++ + drw_map(drw, m->barwin, 0, 0, m->ww, bh); + } + +-- +2.35.1 + |