From b7593897b747bb9e37651fa147f705de5cd68a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sun, 19 Apr 2020 14:50:48 +0200 Subject: [PATCH] render: search: improve handling of very long search strings --- render.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/render.c b/render.c index a9508f9c..fdaaf85d 100644 --- a/render.c +++ b/render.c @@ -1532,13 +1532,19 @@ render_search_box(struct terminal *term) int y = margin; pixman_color_t fg = color_hex_to_pixman(term->colors.table[0]); - if (term->search.cursor < glyph_offset || - term->search.cursor >= glyph_offset + visible_chars + 1) - { - /* Make sure cursor is always visible */ + /* Ensure cursor is visible */ + if (term->search.cursor < glyph_offset) term->render.search_glyph_offset = glyph_offset = term->search.cursor; + else if (term->search.cursor > glyph_offset + visible_chars) { + term->render.search_glyph_offset = glyph_offset = + term->search.cursor - min(term->search.cursor, visible_chars); } + /* Move offset if there is free space available */ + if (term->search.len - glyph_offset < visible_chars) + term->render.search_glyph_offset = glyph_offset = + term->search.len - min(term->search.len, visible_chars); + /* Text (what the user entered - *not* match(es)) */ for (size_t i = glyph_offset; i < term->search.len && i - glyph_offset < visible_chars;