On Wed, Jul 01, 2020 at 08:53:57PM +0200, albanb wrote: > From: Alban Brillat <[email protected]> > > 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 > @@ -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
> @@ -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 */
> @@ -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
[email protected]
http://djmoch.org
signature.asc
Description: PGP signature
