Remove fuzzy match operator again for now, this will be done differently.

This commit is contained in:
nicm
2026-06-23 23:53:06 +00:00
parent 1b5a07a740
commit 55cfdbaa3f
2 changed files with 3 additions and 60 deletions

View File

@@ -4507,53 +4507,6 @@ format_build_modifiers(struct format_expand_state *es, const char **s,
return (list);
}
/* Fuzzy match a single token (no spaces). */
static int
format_fuzzy_match_token(const char *pattern, size_t patternlen,
const char *text, int icase)
{
const char *end = pattern + patternlen;
while (pattern != end) {
if (*text == '\0')
return (0);
if (icase) {
if (tolower((u_char)*pattern) == tolower((u_char)*text))
pattern++;
} else {
if (*pattern == *text)
pattern++;
}
text++;
}
return (1);
}
/*
* Fuzzy match strings. The pattern is split on spaces into tokens and every
* token must match as a sequence.
*/
static int
format_fuzzy_match(const char *pattern, const char *text, int icase)
{
const char *start;
size_t len;
while (*pattern != '\0') {
while (*pattern == ' ')
pattern++;
if (*pattern == '\0')
break;
start = pattern;
while (*pattern != '\0' && *pattern != ' ')
pattern++;
len = pattern - start;
if (!format_fuzzy_match_token(start, len, text, icase))
return (0);
}
return (1);
}
/* Match against an fnmatch(3) pattern or regular expression. */
static char *
format_match(struct format_modifier *fm, const char *pattern, const char *text)
@@ -4564,10 +4517,7 @@ format_match(struct format_modifier *fm, const char *pattern, const char *text)
if (fm->argc >= 1)
s = fm->argv[0];
if (strchr(s, 'z') != NULL) {
if (!format_fuzzy_match(pattern, text, strchr(s, 'i') != NULL))
return (xstrdup("0"));
} else if (strchr(s, 'r') == NULL) {
if (strchr(s, 'r') == NULL) {
if (strchr(s, 'i') != NULL)
flags |= FNM_CASEFOLD;
if (fnmatch(pattern, text, flags) != 0)

11
tmux.1
View File

@@ -6382,20 +6382,13 @@ An optional argument specifies flags:
.Ql r
means the pattern is a regular expression instead of the default
.Xr glob 7
pattern,
.Ql z
means the pattern is a fuzzy match, that is, it matches if its characters
appear in the string in order but not necessarily consecutively;
the pattern is split on spaces into separate terms which must all match,
and
pattern and
.Ql i
means to ignore case.
For example:
.Ql #{m:*foo*,#{host}}
or
.Ql #{m/ri:\[ha]A,MYVAR}
or
.Ql #{m/z:abc,aXbXc} .
.Ql #{m/ri:\[ha]A,MYVAR} .
A
.Ql C
performs a search for a