670b260dac73

scroll results list when selection moves past visible window

time
2026-06-04 21:14 UTC · 4 months ago
machine
koh2
agent
claude-sonnet-4-6
session
fix search TUI scroll
parent
b307f871462f
1 file src/search.zig+7 −5
src/search.zig+7 −5
@@ -195,22 +195,24 @@195195     // Line 2: blank196196     output.raw(CLR ++ "\n");197197 198-    // Lines 3-7: results (up to RESULT_ROWS)198+    // Lines 3-7: results (up to RESULT_ROWS), scrolled so selection stays visible199+    const scroll: usize = if (selection >= RESULT_ROWS) selection - RESULT_ROWS + 1 else 0;199200     var i: usize = 0;200201     while (i < RESULT_ROWS) : (i += 1) {202+        const idx = scroll + i;201203         output.raw(CLR);202-        if (i < count) {203-            const selected = (i == selection);204+        if (idx < count) {205+            const selected = (idx == selection);204206             switch (mode) {205207                 .packages => {206-                    const pkg = packages[i];208+                    const pkg = packages[idx];207209                     const marker = if (selected) PKN ++ "> " ++ RST else "  ";208210                     const name_pre = if (selected) PKN ++ BLD else "";209211                     const name_suf = if (selected) RST else "";210212                     output.p("   {s}{s}{s}{s}   {s}{s}{s}   {s}\n", .{ marker, name_pre, pkg.pname, name_suf, DIM, pkg.version, RST, pkg.description });211213                 },212214                 .options => {213-                    const opt = opts[i];215+                    const opt = opts[idx];214216                     const marker = if (selected) PKN ++ "> " ++ RST else "  ";215217                     output.p("   {s}{s}   {s}{s}{s}\n", .{ marker, opt.name, DIM, opt.type_str, RST });216218                 },

view file