summaryrefslogtreecommitdiff
path: root/src/pardes.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-15 13:13:36 -0300
committerGabriel Schneider <[email protected]>2026-09-15 17:24:42 -0300
commit8ec8924cd577f71953f8e420af1cd60da92f3300 (patch)
treefb28f12321fd263a3dda07e9c82c24477df1f48f /src/pardes.zig
parentffc700d14d61fd5e6ca874a186932300c447c836 (diff)
downloadpardes-8ec8924cd577f71953f8e420af1cd60da92f3300.tar.gz
pardes-8ec8924cd577f71953f8e420af1cd60da92f3300.zip
Add optional tree-sitter declaration context
Diffstat (limited to 'src/pardes.zig')
-rw-r--r--src/pardes.zig35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/pardes.zig b/src/pardes.zig
index 0938736f..8a25f8f9 100644
--- a/src/pardes.zig
+++ b/src/pardes.zig
@@ -257,6 +257,7 @@ test {}
const pane_tail = " " ++ config.pane_builtins_str;
const pdf_pane_tail = " " ++ config.pdf_pane_builtins_str;
const file_pane_tail = " " ++ config.file_pane_builtins_str;
+const context_pane_tail = file_pane_tail ++ " TreeContext";
const terminal_pane_tail = " " ++ config.terminal_pane_builtins_str;
const dirty_marker = " *";
const legacy_pane_tail = " Del";
@@ -1088,6 +1089,37 @@ test "Collapse builtin keeps content and restores the pane from its default tag"
try std.testing.expectEqualStrings(file_pane_tail, Pardes.curTail(pane));
}
+test "TreeContext command and custom tag survive a workspace round trip" {
+ if (comptime !syntax.enabled) return error.SkipZigTest;
+ const p = try Pardes.init(std.testing.allocator, .{ .tty_only = true });
+ defer p.deinit();
+ const pane = try p.setTestFile("pub fn main() void {}\n");
+ try std.testing.expect(!panes.File.supportsContext(pane));
+ try std.testing.expectEqualStrings(file_pane_tail, Pardes.curTail(pane));
+ const path = try p.gpa.dupe(u8, "/test.zig");
+ p.gpa.free(pane.file.?.path);
+ pane.file.?.path = path;
+ if (!panes.File.supportsContext(pane)) return error.SkipZigTest;
+ try std.testing.expectEqualStrings(context_pane_tail, Pardes.curTail(pane));
+ try std.testing.expect(!pane.file.?.tree_context);
+ try std.testing.expect(p.executeBuiltinLine(0, "TreeContext on"));
+ try std.testing.expect(pane.file.?.tree_context);
+ try std.testing.expect(p.executeBuiltinLine(0, "TreeContext off"));
+ try std.testing.expect(!pane.file.?.tree_context);
+ try std.testing.expect(p.executeBuiltinLine(0, "TreeContext"));
+ try std.testing.expect(pane.file.?.tree_context);
+ try std.testing.expect(p.executeBuiltinLine(0, "TreeContext invalid"));
+ try std.testing.expect(pane.file.?.tree_context);
+ try std.testing.expect(pane.appendTag(" Save Keep Del"));
+ pane.tag_init = true;
+ try p.dumpState();
+ const restored = try Pardes.initFromDump(p.gpa, .{ .tty_only = true }, p.dump_out.?);
+ defer restored.deinit();
+ const saved = restored.panes[0].?;
+ try std.testing.expect(saved.file.?.tree_context);
+ try std.testing.expectEqualStrings(" Save Keep Del", Pardes.curTail(saved));
+}
+
test "Togglettymode builtin and keyboard chord share mode transitions including edited tags" {
const p = try Pardes.init(std.testing.allocator, .{ .cols = 120, .rows = 20, .tty_only = true });
defer p.deinit();
@@ -7008,6 +7040,7 @@ pub const Pardes = struct {
fn defaultTail(pane: *const Pane) []const u8 {
if (comptime pdf_enabled) if (pane.pdf != null) return pdf_pane_tail;
+ if (panes.File.supportsContext(pane)) return context_pane_tail;
if (pane.file != null) return file_pane_tail;
if (pane.isTerminal()) return terminal_pane_tail;
return pane_tail;
@@ -12230,7 +12263,7 @@ pub const Pardes = struct {
const said = std.mem.trimStart(u8, rest, " ");
const defaults: []const []const u8 = switch (class) {
.generic => &.{ pdf_pane_tail, pane_tail, pre_collapse_pdf_pane_tail, pre_collapse_pane_tail, pre_column_pdf_pane_tail, pre_column_pane_tail, prev_pane_tail, legacy_pane_tail },
- .file => &.{ file_pane_tail, pre_collapse_file_pane_tail, pre_column_file_pane_tail, prev_file_pane_tail, legacy_file_pane_tail },
+ .file => &.{ context_pane_tail, file_pane_tail, pre_collapse_file_pane_tail, pre_column_file_pane_tail, prev_file_pane_tail, legacy_file_pane_tail },
.output => &.{
file_pane_tail, prev_file_pane_tail, legacy_file_pane_tail,
pane_tail, prev_pane_tail, legacy_pane_tail,