1use ratatui::crossterm::{self, event::KeyModifiers};
2
3#[derive(Clone, Copy, Debug, PartialEq)]
4pub enum Key {
5 Char(char),
6 Alt(char),
7 Ctrl(char),
8 Enter,
9 Backspace,
10 Tab,
11 BackTab,
12 Delete,
13 Up,
14 Down,
15 Left,
16 Right,
17 PageUp,
18 PageDown,
19 Home,
20 End,
21 Esc,
22 Unknown,
23}
24
25#[derive(Clone, Copy, Debug)]
26pub enum Event {
27 Key(Key),
28 Resize(u16, u16),
29 Unknown,
30}
31
32impl From<crossterm::event::Event> for Event {
33 fn from(event: crossterm::event::Event) -> Self {
34 use crossterm::event::KeyCode;
35
36 match event {
37 crossterm::event::Event::Key(key) => match (key.code, key.modifiers) {
38 (KeyCode::Char(c), KeyModifiers::CONTROL) => Event::Key(Key::Ctrl(c)),
39 (KeyCode::Char(c), KeyModifiers::ALT) => Event::Key(Key::Alt(c)),
40 (KeyCode::Char(c), _) => Event::Key(Key::Char(c)),
41 (KeyCode::Enter, _) => Event::Key(Key::Enter),
42 (KeyCode::Backspace, _) => Event::Key(Key::Backspace),
43 (KeyCode::Tab, _) => Event::Key(Key::Tab),
44 (KeyCode::BackTab, _) => Event::Key(Key::BackTab),
45 (KeyCode::Delete, _) => Event::Key(Key::Delete),
46 (KeyCode::Up, _) => Event::Key(Key::Up),
47 (KeyCode::Down, _) => Event::Key(Key::Down),
48 (KeyCode::Left, _) => Event::Key(Key::Left),
49 (KeyCode::Right, _) => Event::Key(Key::Right),
50 (KeyCode::PageUp, _) => Event::Key(Key::PageUp),
51 (KeyCode::PageDown, _) => Event::Key(Key::PageDown),
52 (KeyCode::Home, _) => Event::Key(Key::Home),
53 (KeyCode::Esc, _) => Event::Key(Key::Esc),
54 (KeyCode::End, _) => Event::Key(Key::End),
55 _ => Event::Key(Key::Unknown),
56 },
57 crossterm::event::Event::Resize(x, y) => Event::Resize(x, y),
58 _ => Event::Unknown,
59 }
60 }
61}