From 4b83b63ddb81817ea7cc418f1b61f687ba813085 Mon Sep 17 00:00:00 2001 From: Jonas Maier <> Date: Thu, 5 Mar 2026 07:26:59 +0100 Subject: begin of a parser --- src/raw.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/raw.rs (limited to 'src/raw.rs') diff --git a/src/raw.rs b/src/raw.rs new file mode 100644 index 0000000..e116620 --- /dev/null +++ b/src/raw.rs @@ -0,0 +1,30 @@ +use termios::*; + +/// can toggle raw mode on a fd, at the latest disables it when it gets dropped +pub struct ScopedRawMode { + fd: i32, + settings: Termios, +} + +impl Drop for ScopedRawMode { + fn drop(&mut self) { + self.disable(); + } +} + +impl ScopedRawMode { + pub fn on_fd(fd: i32) -> Self { + let settings = Termios::from_fd(fd).unwrap(); + Self { fd, settings } + } + + pub fn enable(&self) { + let mut settings = self.settings.clone(); + cfmakeraw(&mut settings); + tcsetattr(self.fd, TCSANOW, &settings).unwrap(); + } + + pub fn disable(&self) { + tcsetattr(self.fd, TCSANOW, &self.settings).unwrap(); + } +} -- cgit v1.2.3