diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-15 13:13:36 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-09-15 17:24:42 -0300 |
| commit | 8ec8924cd577f71953f8e420af1cd60da92f3300 (patch) | |
| tree | fb28f12321fd263a3dda07e9c82c24477df1f48f /src/pardes.zig | |
| parent | ffc700d14d61fd5e6ca874a186932300c447c836 (diff) | |
| download | pardes-8ec8924cd577f71953f8e420af1cd60da92f3300.tar.gz pardes-8ec8924cd577f71953f8e420af1cd60da92f3300.zip | |
Add optional tree-sitter declaration context
Diffstat (limited to 'src/pardes.zig')
| -rw-r--r-- | src/pardes.zig | 35 |
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, |
