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