1use crossterm::event::KeyCode as CrosstermKeyCode;
2use termion::event::Key as TermionKey;
3use termwiz::input::KeyCode as TermwizKeyCode;
4
5#[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, 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}