1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use raw_tty::IntoRawMode; use std::error::Error; use std::fs::{self, File}; use std::io::Write; use termion::input::TermRead; pub struct Terminal { pub output: File, } impl Terminal { pub fn new() -> Result<Terminal, Box<dyn Error>> { let output = fs::OpenOptions::new() .read(true) .write(true) .open("/dev/tty")?; Ok(Terminal { output }) } pub fn keys( &mut self, ) -> Result<termion::input::Keys<raw_tty::RawReader<File>>, Box<dyn Error>> { Ok(self.output.try_clone()?.into_raw_mode()?.keys()) } pub fn print(&mut self, text: &str) { self.output.write_all(text.as_bytes()).unwrap(); self.output.flush().unwrap(); } }