commit 353c1a7d5e1b22ef8c7b661119f4d6180c902602
parent f98b5a23b1a002c1943a8eccc828301989dc8d27
Author: Arun Prakash Jana <engineerarun@gmail.com>
Date: Sat, 28 Mar 2026 15:17:37 +0530
Arbitrate fuzzy score matches with name comparison
Diffstat:
| M | src/nnn.c | | | 41 | +++++++++++++++++++++-------------------- |
1 file changed, 21 insertions(+), 20 deletions(-)
diff --git a/src/nnn.c b/src/nnn.c
@@ -3339,7 +3339,7 @@ static int fuzzyentrycmp(const void *va, const void *vb)
if (sa != sb)
return cfg.reverse ? (sa < sb ? 1 : -1) : (sa < sb ? -1 : 1);
- return entrycmpfn(va, vb);
+ return cfg.reverse ? -namecmpfn(pa->name, pb->name) : namecmpfn(pa->name, pb->name);
}
static void clearfilter(void)
@@ -3637,37 +3637,38 @@ static int fill(const char *fltr, regex_t *re)
static int matches(const char *fltr)
{
+ if (cfg.fuzzy && fltr[0]) {
+ fuzzy_sort_fltr = fltr;
+ ENTSORT(pdents, ndents, fuzzyentrycmp);
+ fuzzy_sort_fltr = NULL;
+ return ndents;
+ }
+
+ if (cfg.regex) {
#ifdef PCRE2
- pcre2_code *pcre2x = NULL;
+ pcre2_code *pcre2x = NULL;
- /* Search filter */
- if (cfg.regex && setfilter(&pcre2x, fltr))
- return -1;
+ /* Search filter */
+ if (setfilter(&pcre2x, fltr))
+ return -1;
- ndents = fill(fltr, pcre2x);
+ ndents = fill(fltr, pcre2x);
- if (cfg.regex)
pcre2_code_free(pcre2x);
#else
- regex_t re;
+ regex_t re;
- /* Search filter */
- if (cfg.regex && setfilter(&re, fltr))
- return -1;
+ /* Search filter */
+ if (setfilter(&re, fltr))
+ return -1;
- ndents = fill(fltr, &re);
+ ndents = fill(fltr, &re);
- if (cfg.regex)
regfree(&re);
#endif
+ }
- if (cfg.fuzzy && fltr[0]) {
- fuzzy_sort_fltr = fltr;
- ENTSORT(pdents, ndents, fuzzyentrycmp);
- fuzzy_sort_fltr = NULL;
- } else
- ENTSORT(pdents, ndents, entrycmpfn);
-
+ ENTSORT(pdents, ndents, entrycmpfn);
return ndents;
}