summaryrefslogtreecommitdiff
path: root/src/pardes.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/pardes.zig')
-rw-r--r--src/pardes.zig9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/pardes.zig b/src/pardes.zig
index 6d294230..06bc81ed 100644
--- a/src/pardes.zig
+++ b/src/pardes.zig
@@ -6604,6 +6604,9 @@ pub const Pardes = struct {
// A config init that opens a file with `Look …` armed the pulse before
// anyone touched anything. Nobody asked for that, so boot is silent.
_ = p.takeHaptic();
+ // The ring is reserved whole now, so recording never allocates later.
+ try p.fs.log.buf.ensureTotalCapacityPrecise(p.gpa, p.fs.log.cap);
+ ctlfs.events.announce(p); // /log starts with the panes it booted with
return p;
}
@@ -7438,6 +7441,9 @@ pub const Pardes = struct {
if (text.len == 0) return;
const serial: u32 = if (id < MAX_PANES) if (p.panes[id]) |pane| pane.serial else 0 else 0;
const kept = text[0..@min(text.len, LoggedMessage.cap)];
+ // /log hears every one: a client that retried and failed the same way
+ // is waiting on that second line. Only the +Messages view collapses.
+ ctlfs.events.noteMessage(p, serial, kept);
if (p.messages_len > 0) {
const last = &p.messages[(p.messages_head + limits.message_log - 1) % limits.message_log];
if (last.serial == serial and
@@ -7451,7 +7457,6 @@ pub const Pardes = struct {
return;
}
}
- ctlfs.events.noteMessage(p, serial, kept);
const slot = &p.messages[p.messages_head];
slot.len = @intCast(kept.len);
@memcpy(slot.text[0..slot.len], kept);
@@ -13635,6 +13640,8 @@ pub const Pardes = struct {
p.sync();
p.presentation.enabled = true;
_ = p.takeHaptic(); // see init: a restored session is not a gesture
+ try p.fs.log.buf.ensureTotalCapacityPrecise(p.gpa, p.fs.log.cap);
+ ctlfs.events.announce(p);
return p;
}