fix incorrect ordering of match results
look for exact matches comparing the user input against the item text
This commit is contained in:
		
				
					committed by
					
						
						Hiltjo Posthuma
					
				
			
			
				
	
			
			
			
						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);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user