Skip to main content

radicle_tui/
event.rs

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}