summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--config.def.h12
-rw-r--r--patch/bar_statuscmd.c6
-rw-r--r--patch/bar_statuscolors.c78
-rw-r--r--patch/bar_statuscolors.h13
-rw-r--r--patch/include.h3
-rw-r--r--patches.def.h4
6 files changed, 113 insertions, 3 deletions
diff --git a/config.def.h b/config.def.h
index 6312459..b24add6 100644
--- a/config.def.h
+++ b/config.def.h
@@ -481,7 +481,11 @@ static const BarRule barrules[] = {
#if BAR_LTSYMBOL_PATCH
{ -1, 0, BAR_ALIGN_LEFT, width_ltsymbol, draw_ltsymbol, click_ltsymbol, "layout" },
#endif // BAR_LTSYMBOL_PATCH
- #if BAR_STATUS2D_PATCH && BAR_STATUSCMD_PATCH
+ #if BAR_STATUSCOLORS_PATCH && BAR_STATUSCMD_PATCH
+ { 'A', 0, BAR_ALIGN_RIGHT, width_statuscolors, draw_statuscolors, click_statuscmd, "statuscolors" },
+ #elif BAR_STATUSCOLORS_PATCH
+ { 'A', 0, BAR_ALIGN_RIGHT, width_statuscolors, draw_statuscolors, click_statuscolors, "statuscolors" },
+ #elif BAR_STATUS2D_PATCH && BAR_STATUSCMD_PATCH
{ 'A', 0, BAR_ALIGN_RIGHT, width_status2d, draw_status2d, click_statuscmd, "status2d" },
#elif BAR_STATUS2D_PATCH
{ 'A', 0, BAR_ALIGN_RIGHT, width_status2d, draw_status2d, click_status2d, "status2d" },
@@ -507,7 +511,11 @@ static const BarRule barrules[] = {
{ -1, 0, BAR_ALIGN_NONE, width_wintitle, draw_wintitle, click_wintitle, "wintitle" },
#endif // BAR_TABGROUPS_PATCH | BAR_AWESOMEBAR_PATCH | BAR_FANCYBAR_PATCH | BAR_WINTITLE_PATCH
#if BAR_EXTRASTATUS_PATCH
- #if BAR_STATUS2D_PATCH && BAR_STATUSCMD_PATCH
+ #if BAR_STATUSCOLORS_PATCH && BAR_STATUSCMD_PATCH
+ { 'A', 1, BAR_ALIGN_CENTER, width_statuscolors_es, draw_statuscolors_es, click_statuscmd_es, "statuscolors_es" },
+ #elif BAR_STATUSCOLORS_PATCH
+ { 'A', 1, BAR_ALIGN_CENTER, width_statuscolors_es, draw_statuscolors_es, click_statuscolors, "statuscolors_es" },
+ #elif BAR_STATUS2D_PATCH && BAR_STATUSCMD_PATCH
{ 'A', 1, BAR_ALIGN_CENTER, width_status2d_es, draw_status2d_es, click_statuscmd_es, "status2d_es" },
#elif BAR_STATUS2D_PATCH
{ 'A', 1, BAR_ALIGN_CENTER, width_status2d_es, draw_status2d_es, click_status2d, "status2d_es" },
diff --git a/patch/bar_statuscmd.c b/patch/bar_statuscmd.c
index 5b26932..8a6393d 100644
--- a/patch/bar_statuscmd.c
+++ b/patch/bar_statuscmd.c
@@ -31,9 +31,13 @@ click_statuscmd_text(Arg *arg, int rel_x, char *text)
#endif // BAR_DWMBLOCKS_PATCH
while (text[++i]) {
if ((unsigned char)text[i] < ' ') {
+ #if BAR_STATUSCOLORS_PATCH
+ if (text[i] < 17)
+ continue;
+ #endif // BAR_STATUSCOLORS_PATCH
ch = text[i];
text[i] = '\0';
- #if BAR_STATUS2D_PATCH && !BAR_BAR_STATUSCOLORS_PATCH
+ #if BAR_STATUS2D_PATCH && !BAR_STATUSCOLORS_PATCH
x += status2dtextlength(text);
#else
x += TEXTWM(text) - lrpad;
diff --git a/patch/bar_statuscolors.c b/patch/bar_statuscolors.c
index 4ade4df..7ecb049 100644
--- a/patch/bar_statuscolors.c
+++ b/patch/bar_statuscolors.c
@@ -1,4 +1,56 @@
int
+width_statuscolors(Bar *bar, BarArg *a)
+{
+ #if BAR_STATUSCMD_PATCH
+ return textw_wosc(rawstext);
+ #else
+ return textw_wosc(stext);
+ #endif // BAR_STATUSCMD_PATCH
+}
+
+#if BAR_EXTRASTATUS_PATCH
+int
+width_statuscolors_es(Bar *bar, BarArg *a)
+{
+ #if BAR_STATUSCMD_PATCH
+ return textw_wosc(rawestext);
+ #else
+ return textw_wosc(estext);
+ #endif // BAR_STATUSCMD_PATCH
+}
+#endif // BAR_EXTRASTATUS_PATCH
+
+int
+draw_statuscolors(Bar *bar, BarArg *a)
+{
+ #if BAR_STATUSCMD_PATCH
+ return draw_wosc(bar, a, rawstext);
+ #else
+ return draw_wosc(bar, a, stext);
+ #endif // BAR_STATUSCMD_PATCH
+}
+
+#if BAR_EXTRASTATUS_PATCH
+int
+draw_statuscolors_es(Bar *bar, BarArg *a)
+{
+ #if BAR_STATUSCMD_PATCH
+ return draw_wosc(bar, a, rawestext);
+ #else
+ return draw_wosc(bar, a, estext);
+ #endif // BAR_STATUSCMD_PATCH
+}
+#endif // BAR_EXTRASTATUS_PATCH
+
+#if !BAR_STATUSCMD_PATCH
+int
+click_statuscolors(Bar *bar, Arg *arg, BarArg *a)
+{
+ return ClkStatusText;
+}
+#endif // BAR_STATUSCMD_PATCH
+
+int
textw_wosc(char *s)
{
char *ts = s;
@@ -22,3 +74,29 @@ textw_wosc(char *s)
return sw;
}
+int
+draw_wosc(Bar *bar, BarArg *a, char *s)
+{
+ char *ts = s;
+ char *tp = s;
+ int tx = 0;
+ char ctmp;
+
+ while (1) {
+ if ((unsigned int)*ts > LENGTH(colors)) {
+ ts++;
+ continue;
+ }
+ ctmp = *ts;
+ *ts = '\0';
+ drw_text(drw, a->x + tx, a->y, a->w - tx, a->h, 0, tp, 0, True);
+ tx += TEXTW(tp) - lrpad;
+ if (ctmp == '\0')
+ break;
+ drw_setscheme(drw, scheme[(unsigned int)(ctmp-1)]);
+ *ts = ctmp;
+ tp = ++ts;
+ }
+
+ return 1;
+} \ No newline at end of file
diff --git a/patch/bar_statuscolors.h b/patch/bar_statuscolors.h
new file mode 100644
index 0000000..f4880a6
--- /dev/null
+++ b/patch/bar_statuscolors.h
@@ -0,0 +1,13 @@
+static int width_statuscolors(Bar *bar, BarArg *a);
+#if BAR_EXTRASTATUS_PATCH
+static int width_statuscolors_es(Bar *bar, BarArg *a);
+#endif // BAR_EXTRASTATUS_PATCH
+static int draw_statuscolors(Bar *bar, BarArg *a);
+#if BAR_EXTRASTATUS_PATCH
+static int draw_statuscolors_es(Bar *bar, BarArg *a);
+#endif // BAR_EXTRASTATUS_PATCH
+#if !BAR_STATUSCMD_PATCH
+static int click_statuscolors(Bar *bar, Arg *arg, BarArg *a);
+#endif // BAR_STATUSCMD_PATCH
+static int textw_wosc(char *s);
+static int draw_wosc(Bar *bar, BarArg *a, char *s); \ No newline at end of file
diff --git a/patch/include.h b/patch/include.h
index c913a27..eea37a8 100644
--- a/patch/include.h
+++ b/patch/include.h
@@ -44,6 +44,9 @@
#if BAR_STATUSCMD_PATCH
#include "bar_statuscmd.h"
#endif
+#if BAR_STATUSCOLORS_PATCH
+#include "bar_statuscolors.h"
+#endif
#if BAR_WINICON_PATCH
#include "bar_winicon.h"
#endif
diff --git a/patches.def.h b/patches.def.h
index aaaf02a..a2176bf 100644
--- a/patches.def.h
+++ b/patches.def.h
@@ -361,6 +361,10 @@
/* This patch enables colored text in the status bar. It changes the way colors are defined
* in config.h allowing multiple color combinations for use in the status script.
* This patch is incompatible with and takes precedence over the status2d patch.
+ *
+ * This patch is compatible with the statuscmd patch with the caveat that the first 16 markers
+ * are reserved for status colors restricting block signals to 17 through 31.
+ *
* https://dwm.suckless.org/patches/statuscolors/
*/
#define BAR_STATUSCOLORS_PATCH 0