main: some minor cleanup

This commit is contained in:
torque 2024-08-10 10:52:57 -07:00
parent 02381539a7
commit 8c6d9431c8
Signed by: torque
SSH Key Fingerprint: SHA256:nCrXefBNo6EbjNSQhv0nXmEg/VuNq3sMF5b8zETw3Tk

View File

@ -3,7 +3,6 @@ const builtin = @import("builtin");
const vaxis = @import("vaxis"); const vaxis = @import("vaxis");
const xev = @import("xev"); const xev = @import("xev");
const Cell = vaxis.Cell;
const networking = @import("./networking.zig"); const networking = @import("./networking.zig");
const rotctl = @import("./rotctl.zig"); const rotctl = @import("./rotctl.zig");
@ -206,49 +205,8 @@ pub const RotInt = struct {
try self.vx.render(self.termbuffer.writer().any()); try self.vx.render(self.termbuffer.writer().any());
try self.termbuffer.flush(); try self.termbuffer.flush();
} }
};
pub fn main() !void { fn terminalEvent(
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const alloc = gpa.allocator();
var tty = try vaxis.Tty.init();
defer tty.deinit();
var vx = try vaxis.init(alloc, .{});
defer vx.deinit(alloc, tty.anyWriter());
var pool = xev.ThreadPool.init(.{});
var loop = try xev.Loop.init(.{
.thread_pool = &pool,
});
defer loop.deinit();
var app: RotInt = .{
.allocator = alloc,
.termbuffer = tty.bufferedWriter(),
.vx = &vx,
.loop = &loop,
.poller = try xev.Timer.init(),
};
try app.initInPlace();
var vx_loop: vaxis.xev.TtyWatcher(RotInt) = undefined;
try vx_loop.init(&tty, &vx, &loop, &app, eventCallback);
try vx.enterAltScreen(tty.anyWriter());
try vx.queryTerminalSend(tty.anyWriter());
// Window size appears to be left uninitialized unless we manually set it here. This
// seems sketchy to me (tty fd should be nonblocking for the event loop)
const size = try vaxis.Tty.getWinsize(tty.fd);
vx.resize(alloc, tty.anyWriter(), size) catch @panic("TODO");
try loop.run(.until_done);
}
fn eventCallback(
self_: ?*RotInt, self_: ?*RotInt,
loop: *xev.Loop, loop: *xev.Loop,
watcher: *vaxis.xev.TtyWatcher(RotInt), watcher: *vaxis.xev.TtyWatcher(RotInt),
@ -303,19 +261,44 @@ fn eventCallback(
} }
return .rearm; return .rearm;
} }
};
fn timerCallback( pub fn main() !void {
ud: ?*RotInt, var gpa = std.heap.GeneralPurposeAllocator(.{}){};
loop: *xev.Loop, defer _ = gpa.deinit();
completion: *xev.Completion,
err: xev.Timer.RunError!void,
) xev.CallbackAction {
_ = err catch @panic("timer error");
var app = ud orelse return .disarm; const alloc = gpa.allocator();
app.draw() catch @panic("couldn't draw");
const timer = xev.Timer.init() catch unreachable; var tty = try vaxis.Tty.init();
timer.run(loop, completion, 8, RotInt, app, timerCallback); defer tty.deinit();
return .disarm;
var vx = try vaxis.init(alloc, .{});
defer vx.deinit(alloc, tty.anyWriter());
var pool = xev.ThreadPool.init(.{});
var loop = try xev.Loop.init(.{
.thread_pool = &pool,
});
defer loop.deinit();
var app: RotInt = .{
.allocator = alloc,
.termbuffer = tty.bufferedWriter(),
.vx = &vx,
.loop = &loop,
.poller = try xev.Timer.init(),
};
try app.initInPlace();
var vx_loop: vaxis.xev.TtyWatcher(RotInt) = undefined;
try vx_loop.init(&tty, &vx, &loop, &app, RotInt.terminalEvent);
try vx.enterAltScreen(tty.anyWriter());
try vx.queryTerminalSend(tty.anyWriter());
// Window size appears to be left uninitialized unless we manually set it here. This
// seems sketchy to me (tty fd should be nonblocking for the event loop)
const size = try vaxis.Tty.getWinsize(tty.fd);
vx.resize(alloc, tty.anyWriter(), size) catch @panic("TODO");
try loop.run(.until_done);
} }