all repos — dmenu @ a4053bc4e403ae57343f43b7e363a0911bba5a3a

my build of dmenu

Print highlighted input text only on single match

When the input text fully matches a single item, do not draw the item
and highlight the input text to show that it matches an item in
opposition to regular input text not matching anything.
Quentin Rameau quinq@fifth.space
Tue, 26 Jul 2016 12:48:23 +0200
commit

a4053bc4e403ae57343f43b7e363a0911bba5a3a

parent

657122f7819fd74d66706ffb607deb44884401b7

1 files changed, 13 insertions(+), 3 deletions(-)

jump to
M dmenu.cdmenu.c

@@ -130,7 +130,7 @@ drawmenu(void)

{ unsigned int curpos; struct item *item; - int x = 0, y = 0, w; + int x = 0, y = 0, w, inputscheme; drw_setscheme(drw, scheme[SchemeNorm]); drw_rect(drw, 0, 0, mw, mh, 1, 1);

@@ -138,17 +138,26 @@

if (prompt && *prompt) { drw_setscheme(drw, scheme[SchemeSel]); x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0); + x += 2; } /* draw input field */ w = (lines > 0 || !matches) ? mw - x : inputw; - drw_setscheme(drw, scheme[SchemeNorm]); + if (matches && !strcmp(text, curr->text)) + inputscheme = SchemeSel; + else + inputscheme = SchemeNorm; + drw_setscheme(drw, scheme[inputscheme]); + drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); drw_font_getexts(drw->fonts, text, cursor, &curpos, NULL); if ((curpos += lrpad / 2 - 1) < w) { - drw_setscheme(drw, scheme[SchemeNorm]); + drw_setscheme(drw, scheme[inputscheme]); drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0); } + + if (inputscheme == SchemeSel) + goto drawmap; if (lines > 0) { /* draw vertical list */

@@ -171,6 +180,7 @@ drw_setscheme(drw, scheme[SchemeNorm]);

drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0); } } +drawmap: drw_map(drw, win, 0, 0, mw, mh); }