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.
This commit is contained in:
parent
657122f781
commit
a4053bc4e4
1 changed files with 13 additions and 3 deletions
16
dmenu.c
16
dmenu.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,18 +138,27 @@ drawmenu(void)
|
|||
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 */
|
||||
for (item = curr; item != next; item = item->right)
|
||||
|
@ -171,6 +180,7 @@ drawmenu(void)
|
|||
drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0);
|
||||
}
|
||||
}
|
||||
drawmap:
|
||||
drw_map(drw, win, 0, 0, mw, mh);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue