diff options
| author | Jonas Maier <> | 2026-03-05 07:26:59 +0100 |
|---|---|---|
| committer | Jonas Maier <> | 2026-03-05 07:26:59 +0100 |
| commit | 4b83b63ddb81817ea7cc418f1b61f687ba813085 (patch) | |
| tree | 02dfad0d4235d44545a930a1bd2304b2c6d36031 /src/raw.rs | |
| parent | d4050c3a8cfabd4ae77d001d665573729d28a096 (diff) | |
| download | pish-4b83b63ddb81817ea7cc418f1b61f687ba813085.tar.gz | |
begin of a parser
Diffstat (limited to 'src/raw.rs')
| -rw-r--r-- | src/raw.rs | 30 |
1 files changed, 30 insertions, 0 deletions
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(); + } +} |
