Re: [hackers] [dwm][PATCH] STatuscolor - Add color in the dwm status bar for dwm 6.2.

From: Daniel Moch <daniel_AT_danielmoch.com>
Date: Wed, 1 Jul 2020 17:57:27 -0400

On Wed, Jul 01, 2020 at 08:53:57PM +0200, albanb wrote:
> From: Alban Brillat <binmail_AT_free.fr>
>
> Statuscolor patch fix for 6.2 release (quite late...). The current patch is really slow,
> because of the time spent by the macro TEXTW for the raw characters used
> to define color.
> Never tried to submit a patch, so don't hesitate if it is not consistent
> with the usual best practices.
>
> Alban
>
> ---
> config.def.h | 8 ++++++++
> dwm.c | 37 ++++++++++++++++++++++++++++++++-----
> 2 files changed, 40 insertions(+), 5 deletions(-)
>
> diff --git a/config.def.h b/config.def.h
> index 1c0b587..eaae845 100644
> --- a/config.def.h
> +++ b/config.def.h
> _AT_@ -12,10 +12,18 @@ static const char col_gray2[] = "#444444";
> static const char col_gray3[] = "#bbbbbb";
> static const char col_gray4[] = "#eeeeee";
> static const char col_cyan[] = "#005577";
> +static const char col_black[] = "#000000";
> +static const char col_red[] = "#ff0000";
> +static const char col_yellow[] = "#ffff00";
> +static const char col_white[] = "#ffffff";
> +static const char col_green[] = "#009900";
> static const char *colors[][3] = {
> /* fg bg border */
> [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
> [SchemeSel] = { col_gray4, col_cyan, col_cyan },
> + [SchemeWarn] = { col_black, col_yellow, col_red },
> + [SchemeUrgent]= { col_white, col_red, col_red },
> + [SchemeFine]= { col_green, col_gray1, col_gray2 },
> };

What's the intent of SchemeFine? From the name alone it seems
redundent with SchemeNorm.

>
> /* tagging */
> diff --git a/dwm.c b/dwm.c
> index 4465af1..8e09b8a 100644
> --- a/dwm.c
> +++ b/dwm.c
> _AT_@ -59,7 +59,7 @@
>
> /* enums */
> enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
> -enum { SchemeNorm, SchemeSel }; /* color schemes */
> +enum { SchemeNorm, SchemeSel, SchemeWarn, SchemeUrgent, SchemeFine }; /* color schemes */
> enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
> NetWMFullscreen, NetActiveWindow, NetWMWindowType,
> NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
> _AT_@ -699,14 +699,41 @@ drawbar(Monitor *m)
> int boxs = drw->fonts->h / 9;
> int boxw = drw->fonts->h / 6 + 2;
> unsigned int i, occ = 0, urg = 0;
> - Client *c;
> + char *ts = stext;
> + char *tp = stext;
> + int tx = 0;
> + char ctmp;
> + Client *c;
>
> /* 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]);
> - sw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
> - drw_text(drw, m->ww - sw, 0, sw, bh, 0, stext, 0);
> - }
> + /* Chain length computed between escape sequence which slow down too
> + * much TEXTW function */
> + while(1) {
> + if ((unsigned int)*ts > LENGTH(colors)) { ts++; continue; }
> + ctmp = *ts;
> + *ts = '\0';
> + sw += TEXTW(tp) - lrpad;
> + if (ctmp == '\0') { break; }
> + *ts = ctmp;
> + tp = ++ts;
> + }
> + sw = sw + 2; /* 2px right padding */
> + ts = stext;
> + tp = stext;
> + while (1) {
> + if ((unsigned int)*ts > LENGTH(colors)) { ts++; continue; }
> + ctmp = *ts;
> + *ts = '\0';
> + drw_text(drw, m->ww - sw + tx, 0, sw - tx, bh, 0, tp, 0);
> + tx += TEXTW(tp) -lrpad;
> + if (ctmp == '\0') { break; }
> + drw_setscheme(drw, scheme[(unsigned int)(ctmp-1)]);
> + *ts = ctmp;
> + tp = ++ts;
> + }
> + }
>
> for (c = m->clients; c; c = c->next) {
> occ |= c->tags;
> --
> 2.27.0
>
>

-- 
Daniel Moch
daniel_AT_danielmoch.com
http://djmoch.org

Received on Wed Jul 01 2020 - 23:57:27 CEST

This archive was generated by hypermail 2.3.0 : Thu Jul 02 2020 - 00:00:42 CEST