Make incremental search more useful

Make it unanchored, as well as case-insensitive.
This commit is contained in:
Přemysl Eric Janouch 2021-12-21 05:37:42 +01:00
parent 840c69767c
commit 48482ef2e5
Signed by: p
GPG Key ID: A0420B94F92B9493
2 changed files with 12 additions and 7 deletions

2
NEWS
View File

@ -4,7 +4,7 @@ x.x.x (xxxx-xx-xx)
* Now fetching Internet stream information asynchronously
* Added rudimentary incremental search, normally bound to C-s, in all tabs
* Added basic incremental search, normally bound to C-s, in all tabs
* Fixed jumping to the beginning of the queue after deleting items

View File

@ -2350,12 +2350,17 @@ static size_t
incremental_search_match (const ucs4_t *needle, size_t len,
const struct row_buffer *row)
{
// TODO: case-insensitive search, wilcards, regexps, something easy to use
size_t i = 0;
for (; i < len && i < row->chars_len; i++)
if (needle[i] != row->chars[i].c)
break;
return i;
// XXX: this is slow and simplistic, but unistring is awkward to use
size_t best = 0;
for (size_t start = 0; start < row->chars_len; start++)
{
size_t i = 0;
for (; i < len && start + i < row->chars_len; i++)
if (uc_tolower(needle[i]) != uc_tolower(row->chars[start + i].c))
break;
best = MAX (best, i);
}
return best;
}
static void