Browse Source

fix incorrect ordering of match results

look for exact matches comparing the user input against the item text
master
Davide Del Zompo 9 years ago
committed by Hiltjo Posthuma
parent
commit
acbf35a5e3
1 changed files with 3 additions and 2 deletions
  1. +3
    -2
      dmenu.c

+ 3
- 2
dmenu.c View File

@ -208,7 +208,7 @@ match(void)
char buf[sizeof text], *s; char buf[sizeof text], *s;
int i, tokc = 0; int i, tokc = 0;
size_t len;
size_t len, textsize;
struct item *item, *lprefix, *lsubstr, *prefixend, *substrend; struct item *item, *lprefix, *lsubstr, *prefixend, *substrend;
strcpy(buf, text); strcpy(buf, text);
@ -219,6 +219,7 @@ match(void)
len = tokc ? strlen(tokv[0]) : 0; len = tokc ? strlen(tokv[0]) : 0;
matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL; matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL;
textsize = strlen(text) + 1;
for (item = items; item && item->text; item++) { for (item = items; item && item->text; item++) {
for (i = 0; i < tokc; i++) for (i = 0; i < tokc; i++)
if (!fstrstr(item->text, tokv[i])) if (!fstrstr(item->text, tokv[i]))
@ -226,7 +227,7 @@ match(void)
if (i != tokc) /* not all tokens match */ if (i != tokc) /* not all tokens match */
continue; continue;
/* exact matches go first, then prefixes, then substrings */ /* 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); appenditem(item, &matches, &matchend);
else if (!fstrncmp(tokv[0], item->text, len)) else if (!fstrncmp(tokv[0], item->text, len))
appenditem(item, &lprefix, &prefixend); appenditem(item, &lprefix, &prefixend);


Loading…
Cancel
Save