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
32
use crossterm::event::{read, Event, KeyEvent, KeyCode, KeyModifiers};
use crossterm::terminal;
use crate::types::ErrBox;
pub fn get_terminal_width() -> Option<u16> {
get_terminal_size().map(|(cols, _)| cols)
}
pub fn get_terminal_size() -> Option<(u16, u16)> {
match crossterm::terminal::size() {
Ok(size) => Some(size),
Err(_) => None,
}
}
pub(crate) fn read_terminal_event() -> Result<Event, ErrBox> {
terminal::enable_raw_mode()?;
let result = read();
terminal::disable_raw_mode()?;
match result {
Ok(Event::Key(KeyEvent {
code: KeyCode::Char('c'),
modifiers: KeyModifiers::CONTROL
})) => Ok(Event::Key(KeyEvent {
code: KeyCode::Esc,
modifiers: KeyModifiers::NONE,
})),
_ => Ok(result?),
}
}