From 7fe3a1d9a9ee3c2510ecac40e079608447eead70 Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Tue, 29 Sep 2026 03:14:45 -0300 Subject: The docs give the full-column refusal, an Edit block left open at close, and byte columns Round 11's doc findings: the skill names the full-column refusal beside the 64-pane cap; fs.md and the skill say an Edit block still open when its open closes fails with unmatched { and an err; and line:col's byte columns get the tip for character columns from tools (the same on ASCII, else a search or #n). A unit test pins the unmatched { at close. Co-Authored-By: Claude Opus 5.5 --- src/ninep/tree.zig | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/ninep/tree.zig') diff --git a/src/ninep/tree.zig b/src/ninep/tree.zig index 414a0b6e..f45a1a90 100644 --- a/src/ninep/tree.zig +++ b/src/ninep/tree.zig @@ -1522,3 +1522,14 @@ test "no placement leaves a pane shorter than its tag and two rows; a full colum try testing.expect(p.rects[k].h >= p.panes[k].?.tag_rows + pardes.layout.min_body_rows); }; } + +test "an Edit block still open when its open closes fails there with an err and changes nothing" { + const p = try th.withFile(testing.allocator, "abc\n"); + defer p.deinit(); + const ctl_node = Node.of(serialOf(p), .ctl); + const c = call(p, .{ .tag = 1, .op = .open, .node = ctl_node, .omode = 1 }).reply.handle; + _ = call(p, .{ .tag = 2, .op = .write, .node = ctl_node, .handle = c, .data = "Edit ,x/b/{\ni/[/\n" }); + _ = call(p, .{ .tag = 3, .op = .release, .node = ctl_node, .handle = c, .opened = true }); + try testing.expect(th.logHas(p, "unmatched")); + try testing.expectEqualStrings("abc\n", p.panes[0].?.file.?.content); +} -- cgit v1.3