use crossterm::{ self as ct, event::{self, Event, KeyCode, KeyEvent, KeyModifiers}, }; fn with_raw(f: impl FnOnce() -> R) -> R { match ct::terminal::enable_raw_mode() { Err(_) => { eprintln!("Failed to convert stdio to raw mode. Can't continue."); std::process::exit(1); } Ok(_raw_screen) => { let r = f(); let _ignored = ct::terminal::disable_raw_mode(); r } } } fn main() { with_raw(|| loop { if let Ok(ev) = event::read() { if let Event::Key(KeyEvent { code: KeyCode::Char('c'), modifiers, }) = ev { if modifiers.contains(KeyModifiers::CONTROL) { println!("Exiting"); break; } } println!("{:?}", ev); println!("{}", ct::cursor::MoveLeft(200)); } }) }