summaryrefslogtreecommitdiff
path: root/src/pardes.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-15 14:40:06 -0300
committerGabriel Schneider <[email protected]>2026-09-15 17:24:42 -0300
commit379f4fe55c7c9c7c8cc7b97dc921c83e2c24698b (patch)
tree1b1219542aa0a644ab9b944b78c92a677ecce641 /src/pardes.zig
parentfbd52160a707103c731aec5494885dfcbddd5553 (diff)
downloadpardes-379f4fe55c7c9c7c8cc7b97dc921c83e2c24698b.tar.gz
pardes-379f4fe55c7c9c7c8cc7b97dc921c83e2c24698b.zip
Lead terminal tags with a tinted Tty command
Diffstat (limited to 'src/pardes.zig')
-rw-r--r--src/pardes.zig24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/pardes.zig b/src/pardes.zig
index cd62eb3b..3965c200 100644
--- a/src/pardes.zig
+++ b/src/pardes.zig
@@ -281,6 +281,7 @@ const pre_collapse_pane_tail = " Tty Del";
const pre_collapse_file_pane_tail = " Save Tty Del";
const pre_collapse_pdf_pane_tail = " Tty Del PdfSections PdfTint";
const pre_collapse_terminal_pane_tail = " Save Tty Del Togglettymode Filter";
+const pre_tty_first_terminal_pane_tail = " Save Tty Del Togglettymode Filter Collapse";
const Builtin = builtins.registry.Builtin();
@@ -1275,14 +1276,14 @@ test "legacy default tag tails upgrade while custom tails remain owned" {
});
p.restoreTail(terminal, terminal_old);
try std.testing.expect(!terminal.tag_init);
- try std.testing.expectEqualStrings(" Save Tty Del Togglettymode Filter Collapse", Pardes.curTail(terminal));
+ try std.testing.expectEqualStrings(" Tty Save Del Togglettymode Filter Collapse", Pardes.curTail(terminal));
const terminal_previous = try std.fmt.allocPrint(p.scratch.allocator(), "{s} New Del", .{
try p.tagPrefix(terminal),
});
p.restoreTail(terminal, terminal_previous);
try std.testing.expect(!terminal.tag_init);
- try std.testing.expectEqualStrings(" Save Tty Del Togglettymode Filter Collapse", Pardes.curTail(terminal));
+ try std.testing.expectEqualStrings(" Tty Save Del Togglettymode Filter Collapse", Pardes.curTail(terminal));
const terminal_prefilter = try std.fmt.allocPrint(p.scratch.allocator(), "{s}{s}", .{
try p.tagPrefix(terminal),
@@ -1290,7 +1291,7 @@ test "legacy default tag tails upgrade while custom tails remain owned" {
});
p.restoreTail(terminal, terminal_prefilter);
try std.testing.expect(!terminal.tag_init);
- try std.testing.expectEqualStrings(" Save Tty Del Togglettymode Filter Collapse", Pardes.curTail(terminal));
+ try std.testing.expectEqualStrings(" Tty Save Del Togglettymode Filter Collapse", Pardes.curTail(terminal));
const terminal_custom = try std.fmt.allocPrint(p.scratch.allocator(), "{s} Keep Del", .{
try p.tagPrefix(terminal),
@@ -1319,7 +1320,7 @@ test "legacy default tag tails upgrade while custom tails remain owned" {
.terminal = .{ .cwd = "/historical/cwd" },
});
try std.testing.expect(!terminal.tag_init);
- try std.testing.expectEqualStrings(" Save Tty Del Togglettymode Filter Collapse", Pardes.curTail(terminal));
+ try std.testing.expectEqualStrings(" Tty Save Del Togglettymode Filter Collapse", Pardes.curTail(terminal));
// This happens to be the historical FILE default, but on a terminal it is
// user-owned text and must not be swallowed by migration.
@@ -7107,7 +7108,16 @@ pub const Pardes = struct {
return out;
}
- fn tagNameRange(pane: *const Pane, prefix_len: usize) ?struct { lo: usize, hi: usize } {
+ fn tagTintRange(pane: *const Pane, tag: []const u8, prefix_len: usize) ?struct { lo: usize, hi: usize } {
+ if (pane.isTerminal()) {
+ var words = std.mem.tokenizeAny(u8, tag[prefix_len..], " \t\r\n");
+ while (words.next()) |word| {
+ if (!std.mem.eql(u8, word, "Tty")) continue;
+ const lo = @intFromPtr(word.ptr) - @intFromPtr(tag.ptr);
+ return .{ .lo = lo, .hi = lo + word.len };
+ }
+ return null;
+ }
var start: usize = 0;
const name = if (pane.file) |file|
if (pane.tag_name_len) |len| pane.tag_name[0..len] else file.path
@@ -12459,7 +12469,7 @@ pub const Pardes = struct {
pre_collapse_file_pane_tail,
pre_collapse_pane_tail,
},
- .terminal => &.{ terminal_pane_tail, pre_collapse_terminal_pane_tail, pre_column_terminal_pane_tail, pre_tty_terminal_pane_tail, prev_terminal_pane_tail, legacy_terminal_pane_tail, pane_tail, pre_collapse_pane_tail, pre_column_pane_tail, prev_pane_tail, legacy_pane_tail },
+ .terminal => &.{ terminal_pane_tail, pre_tty_first_terminal_pane_tail, pre_collapse_terminal_pane_tail, pre_column_terminal_pane_tail, pre_tty_terminal_pane_tail, prev_terminal_pane_tail, legacy_terminal_pane_tail, pane_tail, pre_collapse_pane_tail, pre_column_pane_tail, prev_pane_tail, legacy_pane_tail },
};
for (defaults) |default|
if (std.mem.eql(u8, said, std.mem.trimStart(u8, default, " "))) return;
@@ -13253,7 +13263,7 @@ pub const Pardes = struct {
tag.len;
const tag_start = @min(tag_cut, panes.File.rawAtDisplay(tag, pane.tag_scroll));
_ = s.print(tx, tag_y, tw, tag[tag_start..tag_cut], tag_style);
- if (tagNameRange(pane, tag.len - curTail(pane).len)) |name| {
+ if (tagTintRange(pane, tag, tag.len - curTail(pane).len)) |name| {
const lo = @max(name.lo, tag_start);
const hi = @min(name.hi, tag_cut);
if (lo < hi) {