summaryrefslogtreecommitdiff
path: root/src/tty
diff options
context:
space:
mode:
Diffstat (limited to 'src/tty')
-rw-r--r--src/tty/tty.zig11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/tty/tty.zig b/src/tty/tty.zig
index 23b7c09b..03ccd3e2 100644
--- a/src/tty/tty.zig
+++ b/src/tty/tty.zig
@@ -727,6 +727,7 @@ fn localSession(
if (sh.inotify_fd >= 0) sh.watch_task = io.concurrent(watchFiles, .{ io, sh.inotify_fd, loop }) catch null;
frames: while (!core.quit) {
+ pardes.turn.restoreSettled();
try core.pump(host);
if (core.takeRestore()) |rp| blk: {
const bytes = filesystem.readRestore(gpa, rp) catch |err| {
@@ -760,7 +761,7 @@ fn localSession(
_ = file_watch.applyThemeEffect(core, gpa, sh.inotify_fd, &sh.watches, 0, false, false);
clearNativeImages(kitty_handles, vx, tty);
nc.native_images = vx.caps.kitty_graphics;
- if (fs) |f| f.reset(core);
+ if (fs) |f| f.reset(nc);
core.deinit();
core = nc;
sh.core = nc;
@@ -871,15 +872,21 @@ const Shell = struct {
fn waitInput(ctx: ?*anyopaque, timeout_ms: u32) void {
const s = of(ctx);
var batch: usize = 0;
+ // The wait is the 9P connections' turn with the core.
if (timeout_ms == 0) {
+ pardes.turn.rest();
const first = s.loop.nextEvent() catch {
+ pardes.turn.wake();
s.core.quit = true;
return s.reloadWatched();
};
+ pardes.turn.wake();
batch = 1;
if (s.apply(first)) return s.reloadWatched();
} else {
+ pardes.turn.rest();
std.Io.sleep(s.io, .fromMilliseconds(timeout_ms), .awake) catch {};
+ pardes.turn.wake();
_ = s.apply(.tick);
batch = 1;
}
@@ -994,7 +1001,7 @@ const Shell = struct {
fn pollFrame(ctx: ?*anyopaque) void {
const s = of(ctx);
- if (s.fs) |f| if (f.tick(s.core).pending) {
+ if (s.fs) |f| if (f.tick().pending) {
_ = s.loop.tryPostEvent(.fs_ready) catch {};
};
for (&s.ptys, 0..) |*slot, id| if (slot.*) |pt| {