const std = @import("std"); const os = std.os; const linux = std.os.linux; var origTermios: os.termios = undefined; pub fn main() anyerror!void { const stdin = std.io.getStdIn(); try enableRawMode(stdin); defer disableRawMode(stdin); errdefer disableRawMode(stdin); var ch: [1]u8 = undefined; while(!std.mem.eql(u8, &ch, &.{'q'})) { _ = try stdin.read(&ch); } } fn enableRawMode(stdin: std.fs.File) anyerror!void { origTermios = try os.tcgetattr(stdin.handle); var termState = origTermios; termState.lflag &= ~@as(linux.tcflag_t, linux.ECHO); try os.tcsetattr(stdin.handle, linux.TCSA.FLUSH, termState); } fn disableRawMode(stdin: std.fs.File) void { os.tcsetattr(stdin.handle, linux.TCSA.FLUSH, origTermios) catch |err| { std.debug.print("{s}", .{err}); return; }; }