diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-15 16:05:34 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-09-15 17:24:42 -0300 |
| commit | b292808d75078c6b121e4873b150574308bcdc6f (patch) | |
| tree | 5c213e1311de58f9259de5e416dfeba6b955b151 /src/pardes.zig | |
| parent | 8ac4a48a2e8e66a9e72bcbc61c114be8db9215fd (diff) | |
| download | pardes-b292808d75078c6b121e4873b150574308bcdc6f.tar.gz pardes-b292808d75078c6b121e4873b150574308bcdc6f.zip | |
Use result metadata when walking output locations with n and N
Diffstat (limited to 'src/pardes.zig')
| -rw-r--r-- | src/pardes.zig | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/pardes.zig b/src/pardes.zig index eb0a442f..294e6812 100644 --- a/src/pardes.zig +++ b/src/pardes.zig @@ -9636,7 +9636,7 @@ pub const Pardes = struct { if (budget.* == 0) return null; budget.* -= 1; const ln = lines[@intCast(r)]; - if (pane.file) |f| if (!panes.Output.isWalkRow(f.output, ln)) continue; + if (pane.file) |*f| if (!panes.Output.isWalkRow(f, @intCast(r), ln)) continue; const on_start = r == start; switch (grain) { .word => { @@ -9658,10 +9658,14 @@ pub const Pardes = struct { // one span per row, so there is nothing to keep and nothing to // scan past: the row either offers it or it does not .line, .whole => { - const sp = (if (grain == .line) - look.lineSpan(p, ln, dir, &realbuf) - else - wholeRowSpan(ln)) orelse continue; + const sp = span: { + if (grain == .whole) break :span wholeRowSpan(ln); + if (pane.file) |f| if (@as(usize, @intCast(r)) < f.location_rows.len) { + const end = f.location_rows[@intCast(r)].location_end; + if (end > 0) break :span @as(?look.Span, .{ .start = 0, .end = end }); + }; + break :span look.lineSpan(p, ln, dir, &realbuf); + } orelse continue; const col0: i32 = @intCast(sp.start); if (lookPast(col0, from, on_start, delta)) return .{ .row = r, .col0 = col0, .col1 = @intCast(sp.end - 1) }; |
