diff options
author | Přemysl Eric Janouch <p@janouch.name> | 2021-12-21 05:37:42 +0100 |
---|---|---|
committer | Přemysl Eric Janouch <p@janouch.name> | 2021-12-21 05:46:22 +0100 |
commit | 48482ef2e53b5eaae9a47e8ade9e3940bc01f48d (patch) | |
tree | 58fc789d1a5bd2e7156ff0642a3297dddd82086f | |
parent | 840c69767c6eea61e69343546ecdadae70b9afad (diff) | |
download | nncmpp-48482ef2e53b5eaae9a47e8ade9e3940bc01f48d.tar.gz nncmpp-48482ef2e53b5eaae9a47e8ade9e3940bc01f48d.tar.xz nncmpp-48482ef2e53b5eaae9a47e8ade9e3940bc01f48d.zip |
Make incremental search more useful
Make it unanchored, as well as case-insensitive.
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | nncmpp.c | 17 |
2 files changed, 12 insertions, 7 deletions
@@ -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 @@ -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 |