aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVidhu Kant Sharma <vidhukant@vidhukant.com>2025-05-10 20:13:39 +0530
committerVidhu Kant Sharma <vidhukant@vidhukant.com>2025-05-10 20:13:39 +0530
commit7b54c80ec7c930598cfc44115bd710210298f6b8 (patch)
tree7c8f5f44d5a10cb853b859f22b309620e7dc4bca
parent64662eac26b1e6338c2980e57022f49e84907b7e (diff)
patched dwm-barconfig-6.3.diff
-rw-r--r--config.def.h4
-rw-r--r--dwm.c156
-rw-r--r--patches/dwm-barconfig-6.3.diff183
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} },
};
-
diff --git a/dwm.c b/dwm.c
index 026ffc8..07e1f1a 100644
--- a/dwm.c
+++ b/dwm.c
@@ -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
+