dmenu

my fork of dmenu
Index Commits Files Refs README LICENSE
commit acbf35a5e35b6f6a7dd3f8da49a6e5ec5ac075ce
parent 240a7810e492ec01075614729a1a1c45ef9f7af2
Author: Davide Del Zompo <davide.delzompo@gmail.com>
Date:   Sun,  4 Oct 2015 14:01:22 +0200

fix incorrect ordering of match results

look for exact matches comparing the user input against the item text

Diffstat:
Mdmenu.c | 5+++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/dmenu.c b/dmenu.c
@@ -208,7 +208,7 @@ match(void)
 
     char buf[sizeof text], *s;
     int i, tokc = 0;
-    size_t len;
+    size_t len, textsize;
     struct item *item, *lprefix, *lsubstr, *prefixend, *substrend;
 
     strcpy(buf, text);
@@ -219,6 +219,7 @@ match(void)
     len = tokc ? strlen(tokv[0]) : 0;
 
     matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL;
+    textsize = strlen(text) + 1;
     for (item = items; item && item->text; item++) {
         for (i = 0; i < tokc; i++)
             if (!fstrstr(item->text, tokv[i]))
@@ -226,7 +227,7 @@ match(void)
         if (i != tokc) /* not all tokens match */
             continue;
         /* exact matches go first, then prefixes, then substrings */
-        if (!tokc || !fstrncmp(tokv[0], item->text, len + 1))
+        if (!tokc || !fstrncmp(text, item->text, textsize))
             appenditem(item, &matches, &matchend);
         else if (!fstrncmp(tokv[0], item->text, len))
             appenditem(item, &lprefix, &prefixend);