diff options
| -rw-r--r-- | src/look.zig | 5 | ||||
| -rw-r--r-- | src/ninep/ctl.zig | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/look.zig b/src/look.zig index 6a4fe1d1..28986552 100644 --- a/src/look.zig +++ b/src/look.zig @@ -1365,8 +1365,9 @@ pub fn lookAt(p: *Pardes, id: usize, operand: []const u8) void { }, .pane => |t| { - if (t.id >= MAX_PANES) return; - const target = p.panes[t.id] orelse return; + // `@p<serial>` names no open pane: a miss, said. + if (t.id >= MAX_PANES or p.panes[t.id] == null) return missed(p, id, "no pane {s}", .{pl.path[0..@min(pl.path.len, 32)]}); + const target = p.panes[t.id].?; const before = p.active; clearNavigationSelection(p, target); focusPaneLine(p, t.id, t.at, .center); diff --git a/src/ninep/ctl.zig b/src/ninep/ctl.zig index b6fefa01..47ac2846 100644 --- a/src/ninep/ctl.zig +++ b/src/ninep/ctl.zig @@ -1963,4 +1963,9 @@ test "@p<serial>:<address> takes any sam address; a miss and an unknown serial a _ = wr(p, root, "@p999:/foo/\n"); try testing.expect(th.logHas(p, "look: no pane @p999")); try testing.expectEqualStrings("", rd(p, root, 0, 64).bytes); + // A line address to no pane is a miss too, not the active pane. + _ = wr(p, root, "@p77:1\n"); + try testing.expect(th.logHas(p, "look: no pane @p77")); + try testing.expectEqualStrings("", rd(p, root, 0, 64).bytes); } + |
