summaryrefslogtreecommitdiff
path: root/src/Terminal.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-28 00:30:46 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:14 -0300
commit232bfbbc4371a1fe9df210874118b4450dce7f9d (patch)
tree6af9cfcc6e741082b15a270a6d80d3d182301ce5 /src/Terminal.zig
parent42748f92b77367db415c8b4d0f2e537a9e1ddde7 (diff)
downloadpardes-232bfbbc4371a1fe9df210874118b4450dce7f9d.tar.gz
pardes-232bfbbc4371a1fe9df210874118b4450dce7f9d.zip
Let a pane's tag take a row for each line it holds
A tag that is a text can hold a newline, and the tagline, the body under it and the pointer all assumed one row. The pane's tag now takes a row per line (up to eight, and never the body's last row); the body starts below it, the rows a pointer counts start the body after the tag's lines, a click on any line puts the tag's cursor there, and a pixel shell gets a tag layer per line. A tag of one line draws exactly as before. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/Terminal.zig')
-rw-r--r--src/Terminal.zig12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/Terminal.zig b/src/Terminal.zig
index 7b5af696..16d5af26 100644
--- a/src/Terminal.zig
+++ b/src/Terminal.zig
@@ -1723,7 +1723,7 @@ pub fn recolorAnsi(p: *Pardes, pane: *Pane, r: pardes.Rect, tx: u16, tw: u16, bo
if (comptime !enabled) return;
const s = &p.surface;
if (pane.terminal == null) return;
- const body_y = p.bodyTop(r);
+ const body_y = p.bodyTop(pane, r);
var filtered_storage: FilteredColors = undefined;
const filtered: ?*FilteredColors = if (pane.tty_filter) blk: {
const tz_filter = tracy.zone(@src(), "filterInit");
@@ -2081,7 +2081,7 @@ test "terminal Filter keys indexed truecolor OSC and background-only cells throu
defer frame.deinit();
const r = p.rects[0];
const tx = r.x + config.GUTTER;
- const body_y = if (p.settings.tag_bottom) r.y else r.y + pardes.BOX_H;
+ const body_y = p.bodyTop(pane, r);
const raw = try p.render(frame.allocator());
try testing.expectEqual(pardes.Color{ .index = 1 }, raw.at(tx, body_y).style.fg);
@@ -2231,7 +2231,7 @@ test "terminal Filter preserves exact palette-null light theme default roles" {
defer frame.deinit();
const r = p.rects[0];
const tx = r.x + config.GUTTER;
- const body_y = if (p.settings.tag_bottom) r.y else r.y + pardes.BOX_H;
+ const body_y = p.bodyTop(pane, r);
const ordinary = try p.render(frame.allocator());
try testing.expectEqual(pardes.Color{ .rgb = light.fg.? }, ordinary.at(tx, body_y).style.fg);
try testing.expectEqual(pardes.Color{ .rgb = light.bg.? }, ordinary.at(tx, body_y).style.bg);
@@ -2290,7 +2290,7 @@ test "terminal Filter refuses a foreground that would collapse onto the page" {
defer frame.deinit();
const r = p.rects[0];
const tx = r.x + config.GUTTER;
- const body_y = if (p.settings.tag_bottom) r.y else r.y + pardes.BOX_H;
+ const body_y = p.bodyTop(pane, r);
for (0..9) |t| {
p.settings.theme = @intCast(t);
@@ -2382,7 +2382,7 @@ test "tty ansi colors follow the prompt hug into normal mode" {
defer frame.deinit();
const r = p.rects[0];
const tx = r.x + config.GUTTER;
- const body_y = if (p.settings.tag_bottom) r.y else r.y + pardes.BOX_H;
+ const body_y = p.bodyTop(pane, r);
const red: pardes.Color = .{ .rgb = p.theme().palette.?[1] };
const blue: pardes.Color = .{ .rgb = p.theme().palette.?[4] };
@@ -2417,7 +2417,7 @@ test "a prompt row hidden end to end paints nothing at all" {
defer frame.deinit();
const r = p.rects[0];
const tx = r.x + config.GUTTER;
- const body_y = if (p.settings.tag_bottom) r.y else r.y + pardes.BOX_H;
+ const body_y = p.bodyTop(pane, r);
p.shell_rows.stale = true;
const s = try p.render(frame.allocator());