keybinding/
lib.rs

1use crossterm::event::KeyCode as CrosstermKeyCode;
2use termion::event::Key as TermionKey;
3use termwiz::input::KeyCode as TermwizKeyCode;
4
5// relevant imports:
6// use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
7// use termion::event::{Event, Key};
8// use termwiz::input::{KeyCode, KeyEvent, Modifiers};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11pub enum KeyCode {
12    Backspace,
13    Enter,
14    Left,
15    Right,
16    Up,
17    Down,
18    Home,
19    End,
20    PageUp,
21    PageDown,
22    Tab,
23    BackTab,
24    Delete,
25    Insert,
26    F(u8),
27    Char(char),
28    Null,
29    Esc,
30    ScrollLock,
31    NumLock,
32    PrintScreen,
33    PauseBreak,
34    Menu,
35}
36
37impl From<CrosstermKeyCode> for KeyCode {
38    fn from(key_code: CrosstermKeyCode) -> Self {
39        match key_code {
40            CrosstermKeyCode::Backspace => Self::Backspace,
41            CrosstermKeyCode::Enter => Self::Enter,
42            CrosstermKeyCode::Left => Self::Left,
43            CrosstermKeyCode::Right => Self::Right,
44            CrosstermKeyCode::Up => Self::Up,
45            CrosstermKeyCode::Down => Self::Down,
46            CrosstermKeyCode::Home => Self::Home,
47            CrosstermKeyCode::End => Self::End,
48            CrosstermKeyCode::PageUp => Self::PageUp,
49            CrosstermKeyCode::PageDown => Self::PageDown,
50            CrosstermKeyCode::Tab => Self::Tab,
51            CrosstermKeyCode::BackTab => Self::BackTab,
52            CrosstermKeyCode::Delete => Self::Delete,
53            CrosstermKeyCode::Insert => Self::Insert,
54            CrosstermKeyCode::F(n) => Self::F(n),
55            CrosstermKeyCode::Char(c) => Self::Char(c),
56            CrosstermKeyCode::Null => Self::Null,
57            CrosstermKeyCode::Esc => Self::Esc,
58            CrosstermKeyCode::ScrollLock => Self::ScrollLock,
59            CrosstermKeyCode::NumLock => Self::NumLock,
60            CrosstermKeyCode::PrintScreen => Self::PrintScreen,
61            CrosstermKeyCode::Pause => Self::PauseBreak,
62            CrosstermKeyCode::Menu => Self::Menu,
63            CrosstermKeyCode::CapsLock => todo!(),
64            CrosstermKeyCode::KeypadBegin => todo!(),
65            CrosstermKeyCode::Media(_) => todo!(),
66            CrosstermKeyCode::Modifier(_) => todo!(),
67        }
68    }
69}
70
71impl From<TermionKey> for KeyCode {
72    fn from(key_code: TermionKey) -> Self {
73        match key_code {
74            TermionKey::Backspace => Self::Backspace,
75            TermionKey::Left => Self::Left,
76            TermionKey::Right => Self::Right,
77            TermionKey::Up => Self::Up,
78            TermionKey::Down => Self::Down,
79            TermionKey::Home => Self::Home,
80            TermionKey::End => Self::End,
81            TermionKey::PageUp => Self::PageUp,
82            TermionKey::PageDown => Self::PageDown,
83            TermionKey::BackTab => Self::BackTab,
84            TermionKey::Delete => Self::Delete,
85            TermionKey::Insert => Self::Insert,
86            TermionKey::F(n) => Self::F(n),
87            TermionKey::Char(c) => Self::Char(c),
88            TermionKey::Null => Self::Null,
89            TermionKey::Esc => Self::Esc,
90            TermionKey::Ctrl('m') => Self::Enter,
91            TermionKey::Ctrl('i') => Self::Tab, // maybe?
92            TermionKey::Ctrl(c) => Self::Char(c),
93            TermionKey::Alt(_) => todo!(),
94            _ => todo!(),
95        }
96    }
97}
98
99impl From<TermwizKeyCode> for KeyCode {
100    fn from(key_code: TermwizKeyCode) -> Self {
101        match key_code {
102            TermwizKeyCode::Backspace => Self::Backspace,
103            TermwizKeyCode::Enter => Self::Enter,
104            TermwizKeyCode::LeftArrow => Self::Left,
105            TermwizKeyCode::RightArrow => Self::Right,
106            TermwizKeyCode::UpArrow => Self::Up,
107            TermwizKeyCode::DownArrow => Self::Down,
108            TermwizKeyCode::Home => Self::Home,
109            TermwizKeyCode::End => Self::End,
110            TermwizKeyCode::PageUp => Self::PageUp,
111            TermwizKeyCode::PageDown => Self::PageDown,
112            TermwizKeyCode::Tab => Self::Tab,
113            TermwizKeyCode::Delete => Self::Delete,
114            TermwizKeyCode::Insert => Self::Insert,
115            TermwizKeyCode::Function(n) => Self::F(n),
116            TermwizKeyCode::Char(c) => Self::Char(c),
117            TermwizKeyCode::Escape => Self::Esc,
118            TermwizKeyCode::ScrollLock => Self::ScrollLock,
119            TermwizKeyCode::NumLock => Self::NumLock,
120            TermwizKeyCode::PrintScreen => Self::PrintScreen,
121            TermwizKeyCode::Pause => Self::PauseBreak,
122            TermwizKeyCode::Menu => Self::Menu,
123            TermwizKeyCode::Hyper => todo!(),
124            TermwizKeyCode::Super => todo!(),
125            TermwizKeyCode::Meta => todo!(),
126            TermwizKeyCode::Cancel => todo!(),
127            TermwizKeyCode::Clear => todo!(),
128            TermwizKeyCode::Shift => todo!(),
129            TermwizKeyCode::LeftShift => todo!(),
130            TermwizKeyCode::RightShift => todo!(),
131            TermwizKeyCode::Control => todo!(),
132            TermwizKeyCode::LeftControl => todo!(),
133            TermwizKeyCode::RightControl => todo!(),
134            TermwizKeyCode::Alt => todo!(),
135            TermwizKeyCode::LeftAlt => todo!(),
136            TermwizKeyCode::RightAlt => todo!(),
137            TermwizKeyCode::LeftMenu => todo!(),
138            TermwizKeyCode::RightMenu => todo!(),
139            TermwizKeyCode::CapsLock => todo!(),
140            TermwizKeyCode::Select => todo!(),
141            TermwizKeyCode::Print => todo!(),
142            TermwizKeyCode::Execute => todo!(),
143            TermwizKeyCode::Help => todo!(),
144            TermwizKeyCode::LeftWindows => todo!(),
145            TermwizKeyCode::RightWindows => todo!(),
146            TermwizKeyCode::Applications => todo!(),
147            TermwizKeyCode::Sleep => todo!(),
148            TermwizKeyCode::Numpad0 => todo!(),
149            TermwizKeyCode::Numpad1 => todo!(),
150            TermwizKeyCode::Numpad2 => todo!(),
151            TermwizKeyCode::Numpad3 => todo!(),
152            TermwizKeyCode::Numpad4 => todo!(),
153            TermwizKeyCode::Numpad5 => todo!(),
154            TermwizKeyCode::Numpad6 => todo!(),
155            TermwizKeyCode::Numpad7 => todo!(),
156            TermwizKeyCode::Numpad8 => todo!(),
157            TermwizKeyCode::Numpad9 => todo!(),
158            TermwizKeyCode::Multiply => todo!(),
159            TermwizKeyCode::Add => todo!(),
160            TermwizKeyCode::Separator => todo!(),
161            TermwizKeyCode::Subtract => todo!(),
162            TermwizKeyCode::Decimal => todo!(),
163            TermwizKeyCode::Divide => todo!(),
164            TermwizKeyCode::Copy => todo!(),
165            TermwizKeyCode::Cut => todo!(),
166            TermwizKeyCode::Paste => todo!(),
167            TermwizKeyCode::BrowserBack => todo!(),
168            TermwizKeyCode::BrowserForward => todo!(),
169            TermwizKeyCode::BrowserRefresh => todo!(),
170            TermwizKeyCode::BrowserStop => todo!(),
171            TermwizKeyCode::BrowserSearch => todo!(),
172            TermwizKeyCode::BrowserFavorites => todo!(),
173            TermwizKeyCode::BrowserHome => todo!(),
174            TermwizKeyCode::VolumeMute => todo!(),
175            TermwizKeyCode::VolumeDown => todo!(),
176            TermwizKeyCode::VolumeUp => todo!(),
177            TermwizKeyCode::MediaNextTrack => todo!(),
178            TermwizKeyCode::MediaPrevTrack => todo!(),
179            TermwizKeyCode::MediaStop => todo!(),
180            TermwizKeyCode::MediaPlayPause => todo!(),
181            TermwizKeyCode::ApplicationLeftArrow => todo!(),
182            TermwizKeyCode::ApplicationRightArrow => todo!(),
183            TermwizKeyCode::ApplicationUpArrow => todo!(),
184            TermwizKeyCode::ApplicationDownArrow => todo!(),
185            _ => todo!(),
186        }
187    }
188}