Browse Source

fix incorrect ordering of match results

look for exact matches comparing the user input against the item text
master
Davide Del Zompo 10 years ago committed by Hiltjo Posthuma
parent
commit
acbf35a5e3
  1. 5
      dmenu.c

5
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);

Loading…
Cancel
Save