mod(app): interrupt application correctly

This commit is contained in:
2024-11-07 21:55:19 +01:00
parent d9bcbcec7e
commit 4be3451fbf

View File

@@ -79,11 +79,12 @@ pub fn App(comptime E: type, comptime R: fn (comptime bool) type, comptime fulls
this.quit_event.reset();
this.thread = try std.Thread.spawn(.{}, @This().run, .{this});
if (this.termios) |_| return;
var termios: std.posix.termios = undefined;
try terminal.enableRawMode(&termios);
this.termios = termios;
if (this.termios) |_| {} else {
this.termios = termios;
}
if (fullscreen) {
try terminal.saveScreen();
try terminal.enterAltScreen();
@@ -92,6 +93,10 @@ pub fn App(comptime E: type, comptime R: fn (comptime bool) type, comptime fulls
pub fn interrupt(this: *@This()) !void {
this.quit_event.set();
if (fullscreen) {
try terminal.existAltScreen();
try terminal.restoreScreen();
}
if (this.thread) |thread| {
thread.join();
this.thread = null;
@@ -107,6 +112,7 @@ pub fn App(comptime E: type, comptime R: fn (comptime bool) type, comptime fulls
try terminal.restoreScreen();
}
}
this.termios = null;
}
/// Quit the application loop.