+ drw_setscheme(drw, &scheme[SchemeNorm]);
+ drw_rect(drw, 0, 0, mw, mh, 1, 1, 1);
+
+ if (prompt && *prompt) {
+ drw_setscheme(drw, &scheme[SchemeSel]);
+ drw_text(drw, x, 0, promptw, bh, prompt, 0);
+ x += promptw;
+ }
+ /* draw input field */
+ w = (lines > 0 || !matches) ? mw - x : inputw;
+ drw_setscheme(drw, &scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, text, 0);
+
+ if ((curpos = TEXTNW(text, cursor) + bh / 2 - 2) < w) {
+ drw_setscheme(drw, &scheme[SchemeNorm]);
+ drw_rect(drw, x + curpos + 2, 2, 1, bh - 4, 1, 1, 0);
+ }
+
+ if (lines > 0) {
+ /* draw vertical list */
+ w = mw - x;
+ for (item = curr; item != next; item = item->right) {
+ y += h;
+ if (item == sel)
+ drw_setscheme(drw, &scheme[SchemeSel]);
+ else if (item->out)
+ drw_setscheme(drw, &scheme[SchemeOut]);
+ else
+ drw_setscheme(drw, &scheme[SchemeNorm]);
+
+ drw_text(drw, x, y, w, bh, item->text, 0);
+ }
+ } else if (matches) {
+ /* draw horizontal list */
+ x += inputw;
+ w = TEXTW("<");
+ if (curr->left) {
+ drw_setscheme(drw, &scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, "<", 0);
+ }
+ for (item = curr; item != next; item = item->right) {
+ x += w;
+ w = MIN(TEXTW(item->text), mw - x - TEXTW(">"));
+
+ if (item == sel)
+ drw_setscheme(drw, &scheme[SchemeSel]);
+ else if (item->out)
+ drw_setscheme(drw, &scheme[SchemeOut]);
+ else
+ drw_setscheme(drw, &scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, item->text, 0);
+ }
+ w = TEXTW(">");
+ x = mw - w;
+ if (next) {
+ drw_setscheme(drw, &scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, ">", 0);