Print highlighted input text only on single match - dmenu - dynamic menu | |
git clone git://git.suckless.org/dmenu | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit a4053bc4e403ae57343f43b7e363a0911bba5a3a | |
parent 657122f7819fd74d66706ffb607deb44884401b7 | |
Author: Quentin Rameau <[email protected]> | |
Date: Tue, 26 Jul 2016 12:48:23 +0200 | |
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: | |
M dmenu.c | 16 +++++++++++++--- | |
1 file changed, 13 insertions(+), 3 deletions(-) | |
--- | |
diff --git 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); | |
} | |