//! Demonstrates how to block read events. //! //! cargo run --example event-read use std::io::{stdout, Write}; use crossterm::{ cursor::position, event::{read, DisableMouseCapture, EnableMouseCapture, Event, KeyCode}, execute, terminal::{disable_raw_mode, enable_raw_mode}, Result, }; const HELP: &str = r#"Blocking read() - Keyboard, mouse and terminal resize events enabled - Hit "c" to print current cursor position - Use Esc to quit "#; fn print_events() -> Result<()> { loop { // Blocking read let event = read()?; println!("Event: {:?}\r", event); if event == Event::Key(KeyCode::Char('c').into()) { println!("Cursor position: {:?}\r", position()); } if event == Event::Key(KeyCode::Esc.into()) { break; } } Ok(()) } fn main() -> Result<()> { println!("{}", HELP); enable_raw_mode()?; let mut stdout = stdout(); execute!(stdout, EnableMouseCapture)?; if let Err(e) = print_events() { println!("Error: {:?}\r", e); } execute!(stdout, DisableMouseCapture)?; disable_raw_mode() }