crossterm
Crossterm - Terminal Manipulation Reference
Source: https://docs.rs/crossterm/latest/crossterm/
Crate:crossterm
Role in Pour
Crossterm is the backend for ratatui. It handles raw terminal I/O, event capture, and screen management.
Terminal Setup/Teardown
use crossterm::{
execute,
terminal::{enable_raw_mode, disable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
// Setup
enable_raw_mode()?;
execute!(std::io::stdout(), EnterAlternateScreen)?;
// Teardown
disable_raw_mode()?;
execute!(std::io::stdout(), LeaveAlternateScreen)?;
Note: ratatui::init() and ratatui::restore() handle this automatically.
Event Handling
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyModifiers};
// Blocking read
if let Event::Key(key) = event::read()? {
match key.code {
KeyCode::Char('q') => { /* quit */ }
KeyCode::Char('c') if key.modifiers.contains(KeyModifiers::CONTROL) => { /* ctrl+c */ }
KeyCode::Enter => { /* submit */ }
KeyCode::Tab => { /* next field */ }
KeyCode::BackTab => { /* prev field */ }
KeyCode::Up => { /* navigate up */ }
KeyCode::Down => { /* navigate down */ }
KeyCode::Backspace => { /* delete char */ }
KeyCode::Char(c) => { /* type character */ }
KeyCode::Esc => { /* cancel */ }
_ => {}
}
}
// Non-blocking poll
if event::poll(std::time::Duration::from_millis(100))? {
if let Event::Key(key) = event::read()? {
// handle key
}
}
Key Types
| Type | Description |
|---|---|
Event |
Top-level event enum: Key, Mouse, Resize, Paste, FocusGained/Lost |
KeyEvent |
Contains code: KeyCode, modifiers: KeyModifiers, kind: KeyEventKind |
KeyCode |
Enum: Char(char), Enter, Esc, Tab, BackTab, Backspace, Up/Down/Left/Right, F(u8), etc. |
KeyModifiers |
Bitflags: SHIFT, CONTROL, ALT, SUPER, NONE |
KeyEventKind |
Press, Repeat, Release |
Execution Macros
// Immediate flush (for single commands)
execute!(stdout, command1, command2)?;
// Queued (for batch rendering -- ratatui uses this internally)
queue!(stdout, command1, command2)?;
stdout.flush()?;