summaryrefslogtreecommitdiff
path: root/dmenu.c
diff options
context:
space:
mode:
authorQuentin Rameau <quinq@fifth.space>2016-07-26 12:48:23 +0200
committerHiltjo Posthuma <hiltjo@codemadness.org>2016-07-26 18:29:42 +0200
commita4053bc4e403ae57343f43b7e363a0911bba5a3a (patch)
treea059b7f413201432bb3e663a6946be80326fce60 /dmenu.c
parent657122f7819fd74d66706ffb607deb44884401b7 (diff)
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.
Diffstat (limited to 'dmenu.c')
-rw-r--r--dmenu.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/dmenu.c b/dmenu.c
index 8e84fbd..b191486 100644
--- a/dmenu.c
+++ b/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);
}