From 6f8ffecb89a4484a2fc587e0217263d28a7612e5 Mon Sep 17 00:00:00 2001 From: rhodes-b <59537185+rhodes-b@users.noreply.github.com> Date: Thu, 12 Mar 2026 20:21:42 -0500 Subject: [PATCH 1/2] working basic search wrapping --- src/terminal/search/screen.zig | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/terminal/search/screen.zig b/src/terminal/search/screen.zig index 74828d879..c9e0ada7f 100644 --- a/src/terminal/search/screen.zig +++ b/src/terminal/search/screen.zig @@ -740,13 +740,9 @@ pub const ScreenSearch = struct { return true; }; - const next_idx = prev.idx + 1; const active_len = self.active_results.items.len; const history_len = self.history_results.items.len; - if (next_idx >= active_len + history_len) { - // No more matches. We don't wrap or reset the match currently. - return false; - } + const next_idx = if (prev.idx + 1 >= active_len + history_len) 0 else prev.idx + 1; const hl: FlattenedHighlight = if (next_idx < active_len) self.active_results.items[active_len - 1 - next_idx] else @@ -800,14 +796,10 @@ pub const ScreenSearch = struct { return true; }; - // Can't go below zero - if (prev.idx == 0) { - // No more matches. We don't wrap or reset the match currently. - return false; - } - - const next_idx = prev.idx - 1; const active_len = self.active_results.items.len; + const history_len = self.history_results.items.len; + const next_idx = if (prev.idx != 0) prev.idx - 1 else active_len - 1 + history_len; + const hl: FlattenedHighlight = if (next_idx < active_len) self.active_results.items[active_len - 1 - next_idx] else From af84fdbea8fbb1f9418f000151f99d880051a3ba Mon Sep 17 00:00:00 2001 From: rhodes-b <59537185+rhodes-b@users.noreply.github.com> Date: Thu, 12 Mar 2026 20:39:35 -0500 Subject: [PATCH 2/2] fix tests --- src/terminal/search/screen.zig | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/terminal/search/screen.zig b/src/terminal/search/screen.zig index c9e0ada7f..ca2a5a894 100644 --- a/src/terminal/search/screen.zig +++ b/src/terminal/search/screen.zig @@ -1075,17 +1075,17 @@ test "select next" { } }, t.screens.active.pages.pointFromPin(.screen, sel.end).?); } - // Next match (no wrap) + // Next match (wrap) _ = try search.select(.next); { const sel = search.selectedMatch().?.untracked(); try testing.expectEqual(point.Point{ .screen = .{ .x = 0, - .y = 0, + .y = 2, } }, t.screens.active.pages.pointFromPin(.screen, sel.start).?); try testing.expectEqual(point.Point{ .screen = .{ .x = 3, - .y = 0, + .y = 2, } }, t.screens.active.pages.pointFromPin(.screen, sel.end).?); } } @@ -1270,17 +1270,17 @@ test "select prev" { } }, t.screens.active.pages.pointFromPin(.screen, sel.end).?); } - // Prev match (no wrap, stays at newest) + // Prev match (wrap) _ = try search.select(.prev); { const sel = search.selectedMatch().?.untracked(); try testing.expectEqual(point.Point{ .screen = .{ .x = 0, - .y = 2, + .y = 0, } }, t.screens.active.pages.pointFromPin(.screen, sel.start).?); try testing.expectEqual(point.Point{ .screen = .{ .x = 3, - .y = 2, + .y = 0, } }, t.screens.active.pages.pointFromPin(.screen, sel.end).?); } }