search/render: initial support for highlighting all visible matches

Before this patch, only the currently “selected” match was
highlighted (by having the “selected” attribute, and by *not* dimming
it, like the rest of the grid during a scrollback search).

With this patch, we now highlight matches within the viewport. While
searching, only the “primary” match is searched-for, and tracked.

Then, when rendering a frame, we find all “secondary” matches as
well. “holes” are added to the search-mode overlay by the means of an
search-match iterator.

The iterator’s text matching logic is *very* similar to what we do
when the search criteria has been updated, and we re-search the
scrollback. It should be possible to refactor this, and share code.
This commit is contained in:
Daniel Eklöf 2022-04-09 17:57:29 +02:00
parent 78fcdc5787
commit 90c91d6148
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 117 additions and 11 deletions

View file

@ -14,3 +14,11 @@ void search_input(
void search_add_chars(struct terminal *term, const char *text, size_t len);
void search_selection_cancelled(struct terminal *term);
struct search_match_iterator {
struct terminal *term;
struct coord start;
};
struct search_match_iterator search_matches_new_iter(struct terminal *term);
struct range search_matches_next(struct search_match_iterator *iter);