summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/look.zig5
-rw-r--r--src/ninep/ctl.zig5
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);
}
+