summaryrefslogtreecommitdiff
path: root/src/detached
diff options
context:
space:
mode:
Diffstat (limited to 'src/detached')
-rw-r--r--src/detached/server.zig9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/detached/server.zig b/src/detached/server.zig
index 6a4b5001..61fbe111 100644
--- a/src/detached/server.zig
+++ b/src/detached/server.zig
@@ -770,8 +770,10 @@ pub const Session = struct {
const completed = s.ninep_wake.swap(false, .acq_rel) or drained;
for (&s.clients) |*c| if (c.fd >= 0) s.flush(c);
const regridded = s.reconcile();
- // Nobody attached, nobody to dismiss a message (expireUnattended).
+ // Nobody attached, nobody to dismiss a message: the loop expires
+ // them itself, between the editor's steps (expireUnattended).
s.core.unattended = s.primary() == null;
+ pardes.Messages.expireUnattended(s.core);
const now = monotonicMs();
var fds: [poll_slots]libc.pollfd = undefined;
@@ -904,6 +906,11 @@ pub const Session = struct {
due = if (due) |d| @min(d, at9) else at9;
}
}
+ // Unattended messages go on the clock: look again in a while.
+ if (s.core.unattended) for (s.core.panes) |slot| if (slot) |pane| if (pane.msg_len > 0) {
+ due = if (due) |d| @min(d, now + 100) else now + 100;
+ break;
+ };
const at = due orelse return null;
return @intCast(@max(0, @min(at - now, std.math.maxInt(c_int))));
}