static Clr **statusscheme; int width_pwrl_status(Bar *bar, BarArg *a) { #if BAR_STATUSCMD_PATCH return widthpowerlinestatus(rawstext); #else return widthpowerlinestatus(stext); #endif // BAR_STATUSCMD_PATCH } #if BAR_EXTRASTATUS_PATCH int width_pwrl_status_es(Bar *bar, BarArg *a) { #if BAR_STATUSCMD_PATCH return widthpowerlinestatus(rawestext); #else return widthpowerlinestatus(estext); #endif // BAR_STATUSCMD_PATCH } #endif // BAR_EXTRASTATUS_PATCH int draw_pwrl_status(Bar *bar, BarArg *a) { #if BAR_STATUSCMD_PATCH return drawpowerlinestatus(a->x + a->w, rawstext, a); #else return drawpowerlinestatus(a->x + a->w, stext, a); #endif // BAR_STATUSCMD_PATCH } #if BAR_EXTRASTATUS_PATCH int draw_pwrl_status_es(Bar *bar, BarArg *a) { #if BAR_STATUSCMD_PATCH return drawpowerlinestatus(a->x + a->w, rawestext, a); #else return drawpowerlinestatus(a->x + a->w, estext, a); #endif // BAR_STATUSCMD_PATCH } #endif // BAR_EXTRASTATUS_PATCH int click_pwrl_status(Bar *bar, Arg *arg, BarArg *a) { return ClkStatusText; } int widthpowerlinestatus(char *stext) { char status[512]; int w = 0, i, n = strlen(stext); int plw = drw->fonts->h / 2 + 1; char *bs, bp = '|'; strcpy(status, stext); for (i = n, bs = &status[n-1]; i >= 0; i--, bs--) { if (*bs == '<' || *bs == '/' || *bs == '\\' || *bs == '>' || *bs == '|') { /* block start */ if (bp != '|') w += plw; w += TEXTW(bs+2); bp = *bs; *bs = 0; } } if (bp != '|') w += plw * 2; return w; } int drawpowerlinestatus(int xpos, char *stext, BarArg *barg) { char status[512]; int i, n = strlen(stext), cn = 0; int x = xpos, w = 0; int plw = drw->fonts->h / 2 + 1; char *bs, bp = '|'; Clr *prevscheme = statusscheme[0], *nxtscheme; strcpy(status, stext); for (i = n, bs = &status[n-1]; i >= 0; i--, bs--) { if (*bs == '<' || *bs == '/' || *bs == '\\' || *bs == '>' || *bs == '|') { /* block start */ cn = ((int) *(bs+1)) - 1; if (cn < LENGTH(statuscolors)) { drw_settrans(drw, prevscheme, (nxtscheme = statusscheme[cn])); } else { drw_settrans(drw, prevscheme, (nxtscheme = statusscheme[0])); } if (bp != '|') { drw_arrow(drw, x - plw, barg->y, plw, barg->h, bp == '\\' || bp == '>' ? 1 : 0, bp == '<' ? 0 : 1); x -= plw; } drw_setscheme(drw, nxtscheme); w = TEXTW(bs+2); drw_text(drw, x - w, barg->y, w, barg->h, lrpad / 2, bs+2, 0, False); x -= w; bp = *bs; *bs = 0; prevscheme = nxtscheme; } } if (bp != '|') { drw_settrans(drw, prevscheme, scheme[SchemeNorm]); drw_arrow(drw, x - plw, barg->y, plw, barg->h, bp == '\\' || bp == '>' ? 1 : 0, bp == '<' ? 0 : 1); drw_rect(drw, x - 2 * plw, barg->y, plw, barg->h, 1, 1); x -= plw * 2; } return xpos - x; }