fix incorrect ordering of match results
look for exact matches comparing the user input against the item text
This commit is contained in:
parent
240a7810e4
commit
acbf35a5e3
5
dmenu.c
5
dmenu.c
|
@ -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…
Reference in New Issue