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}