termion/sys/unix/
attr.rs

1use std::{io, mem};
2
3use super::{cvt, Termios};
4use super::libc::c_int;
5
6pub fn get_terminal_attr() -> io::Result<Termios> {
7    extern "C" {
8        pub fn tcgetattr(fd: c_int, termptr: *mut Termios) -> c_int;
9    }
10    unsafe {
11        let mut termios = mem::zeroed();
12        cvt(tcgetattr(1, &mut termios))?;
13        Ok(termios)
14    }
15}
16
17pub fn set_terminal_attr(termios: &Termios) -> io::Result<()> {
18    extern "C" {
19        pub fn tcsetattr(fd: c_int, opt: c_int, termptr: *const Termios) -> c_int;
20    }
21    cvt(unsafe { tcsetattr(1, 0, termios) }).and(Ok(()))
22}
23
24pub fn raw_terminal_attr(termios: &mut Termios) {
25    extern "C" {
26        pub fn cfmakeraw(termptr: *mut Termios);
27    }
28    unsafe { cfmakeraw(termios) }
29}