static void drawhighlights(struct item *item, int x, int y, int maxw) { char restorechar, tokens[sizeof text], *highlight, *token; int indentx, highlightlen; drw_setscheme(drw, scheme[item == sel ? SchemeSelHighlight : SchemeNormHighlight]); strcpy(tokens, text); for (token = strtok(tokens, " "); token; token = strtok(NULL, " ")) { highlight = fstrstr(item->text, token); while (highlight) { // Move item str end, calc width for highlight indent, & restore highlightlen = highlight - item->text; restorechar = *highlight; item->text[highlightlen] = '\0'; indentx = TEXTW(item->text); item->text[highlightlen] = restorechar; // Move highlight str end, draw highlight, & restore restorechar = highlight[strlen(token)]; highlight[strlen(token)] = '\0'; if (indentx - (lrpad / 2) - 1 < maxw) drw_text( drw, x + indentx - (lrpad / 2) - 1, y, MIN(maxw - indentx, TEXTW(highlight) - lrpad), bh, 0, highlight, 0 #if PANGO_PATCH , True #endif // PANGO_PATCH ); highlight[strlen(token)] = restorechar; if (strlen(highlight) - strlen(token) < strlen(token)) break; highlight = fstrstr(highlight + strlen(token), token); } } }