dmenu

my fork of dmenu
Index Commits Files Refs README LICENSE
commit a4053bc4e403ae57343f43b7e363a0911bba5a3a
parent 657122f7819fd74d66706ffb607deb44884401b7
Author: Quentin Rameau <quinq@fifth.space>
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:
Mdmenu.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);
 }