about summary refs log tree commit diff
path: root/dmenu.c
diff options
context:
space:
mode:
authorDavide Del Zompo <davide.delzompo@gmail.com>2015-10-04 14:01:22 +0200
committerHiltjo Posthuma <hiltjo@codemadness.org>2015-10-04 14:03:07 +0200
commitacbf35a5e35b6f6a7dd3f8da49a6e5ec5ac075ce (patch)
treee6a967b167a8bd0ffdd7a373034d04239b7e32a9 /dmenu.c
parentfix paste from clipboard (ctrl+shift+y) (diff)
downloaddmenu-acbf35a5e35b6f6a7dd3f8da49a6e5ec5ac075ce.tar.gz
dmenu-acbf35a5e35b6f6a7dd3f8da49a6e5ec5ac075ce.tar.bz2
dmenu-acbf35a5e35b6f6a7dd3f8da49a6e5ec5ac075ce.zip
fix incorrect ordering of match results
look for exact matches comparing the user input against the item text
Diffstat (limited to '')
-rw-r--r--dmenu.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/dmenu.c b/dmenu.c
index 509e566..c9fb38b 100644
--- 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);