| fix incorrect ordering of match results - dmenu - dynamic menu | |
| git clone git://git.suckless.org/dmenu | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit acbf35a5e35b6f6a7dd3f8da49a6e5ec5ac075ce | |
| parent 240a7810e492ec01075614729a1a1c45ef9f7af2 | |
| Author: Davide Del Zompo <[email protected]> | |
| 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: | |
| M dmenu.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); |