1#![allow(dead_code)]
4
5pub mod modifiers {
7 use crossterm::event::KeyModifiers;
8
9 pub const NONE: KeyModifiers = KeyModifiers::NONE;
10 pub const CONTROL: KeyModifiers = KeyModifiers::CONTROL;
11 pub const SHIFT: KeyModifiers = KeyModifiers::SHIFT;
12 pub const ALT: KeyModifiers = KeyModifiers::ALT;
13 pub const META: KeyModifiers = KeyModifiers::META;
14 pub const SUPER: KeyModifiers = KeyModifiers::SUPER;
15 pub const HYPER: KeyModifiers = KeyModifiers::HYPER;
16 pub const CONTROL_ALT: KeyModifiers = KeyModifiers::from_bits_truncate(0b0000_0110);
17 pub const CONTROL_SHIFT: KeyModifiers = KeyModifiers::from_bits_truncate(0b0000_0011);
18 pub const ALT_SHIFT: KeyModifiers = KeyModifiers::from_bits_truncate(0b0000_0101);
19}
20
21#[macro_export]
86macro_rules! ct_event {
87 (key press $keychar:pat) => {
88 crossterm::event::Event::Key(crossterm::event::KeyEvent {
89 code: crossterm::event::KeyCode::Char($keychar),
90 modifiers: $crate::crossterm::modifiers::NONE,
91 kind: crossterm::event::KeyEventKind::Press|crossterm::event::KeyEventKind::Repeat,
92 ..
93 })
94 };
95 (key press ANY-$keychar:pat) => {
96 crossterm::event::Event::Key(crossterm::event::KeyEvent {
97 code: crossterm::event::KeyCode::Char($keychar),
98 kind: crossterm::event::KeyEventKind::Press|crossterm::event::KeyEventKind::Repeat,
99 ..
100 })
101 };
102 (key press $mod:ident-$keychar:pat) => {
103 crossterm::event::Event::Key(crossterm::event::KeyEvent {
104 code: crossterm::event::KeyCode::Char($keychar),
105 modifiers: $crate::crossterm::modifiers::$mod,
106 kind: crossterm::event::KeyEventKind::Press|crossterm::event::KeyEventKind::Repeat,
107 ..
108 })
109 };
110 (key release $keychar:pat) => {
111 crossterm::event::Event::Key(crossterm::event::KeyEvent {
112 code: crossterm::event::KeyCode::Char($keychar),
113 modifiers: $crate::crossterm::modifiers::NONE,
114 kind: crossterm::event::KeyEventKind::Release,
115 ..
116 })
117 };
118 (key release ANY-$keychar:pat) => {
119 crossterm::event::Event::Key(crossterm::event::KeyEvent {
120 code: crossterm::event::KeyCode::Char($keychar),
121 kind: crossterm::event::KeyEventKind::Release,
122 ..
123 })
124 };
125 (key release $mod:ident-$keychar:pat) => {
126 crossterm::event::Event::Key(crossterm::event::KeyEvent {
127 code: crossterm::event::KeyCode::Char($keychar),
128 modifiers: $crate::crossterm::modifiers::$mod,
129 kind: crossterm::event::KeyEventKind::Release,
130 ..
131 })
132 };
133
134 (keycode press F($code:literal)) => {
135 crossterm::event::Event::Key(crossterm::event::KeyEvent {
136 code: crossterm::event::KeyCode::F($code),
137 modifiers: $crate::crossterm::modifiers::NONE,
138 kind: crossterm::event::KeyEventKind::Press|crossterm::event::KeyEventKind::Repeat,
139 ..
140 })
141 };
142 (keycode press $mod:ident-F($code:literal)) => {
143 crossterm::event::Event::Key(crossterm::event::KeyEvent {
144 code: crossterm::event::KeyCode::F($code),
145 modifiers: $crate::crossterm::modifiers::$mod,
146 kind: crossterm::event::KeyEventKind::Press|crossterm::event::KeyEventKind::Repeat,
147 ..
148 })
149 };
150 (keycode press $code:ident) => {
151 crossterm::event::Event::Key(crossterm::event::KeyEvent {
152 code: crossterm::event::KeyCode::$code,
153 modifiers: $crate::crossterm::modifiers::NONE,
154 kind: crossterm::event::KeyEventKind::Press|crossterm::event::KeyEventKind::Repeat,
155 ..
156 })
157 };
158 (keycode press $mod:ident-$code:ident) => {
159 crossterm::event::Event::Key(crossterm::event::KeyEvent {
160 code: crossterm::event::KeyCode::$code,
161 modifiers: $crate::crossterm::modifiers::$mod,
162 kind: crossterm::event::KeyEventKind::Press|crossterm::event::KeyEventKind::Repeat,
163 ..
164 })
165 };
166 (keycode release F($code:literal)) => {
167 crossterm::event::Event::Key(crossterm::event::KeyEvent {
168 code: crossterm::event::KeyCode::F($code),
169 modifiers: $crate::crossterm::modifiers::NONE,
170 kind: crossterm::event::KeyEventKind::Release,
171 ..
172 })
173 };
174 (keycode release $mod:ident-F($code:literal)) => {
175 crossterm::event::Event::Key(crossterm::event::KeyEvent {
176 code: crossterm::event::KeyCode::F($code),
177 modifiers: $crate::crossterm::modifiers::$mod,
178 kind: crossterm::event::KeyEventKind::Release,
179 ..
180 })
181 };
182 (keycode release $code:ident) => {
183 crossterm::event::Event::Key(crossterm::event::KeyEvent {
184 code: crossterm::event::KeyCode::$code,
185 modifiers: $crate::crossterm::modifiers::NONE,
186 kind: crossterm::event::KeyEventKind::Release,
187 ..
188 })
189 };
190 (keycode release $mod:ident-$code:ident) => {
191 crossterm::event::Event::Key(crossterm::event::KeyEvent {
192 code: crossterm::event::KeyCode::$code,
193 modifiers: $crate::crossterm::modifiers::$mod,
194 kind: crossterm::event::KeyEventKind::Release,
195 ..
196 })
197 };
198
199 (mouse down $button:ident for $col:ident, $row:ident ) => {
200 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
201 kind: crossterm::event::MouseEventKind::Down(crossterm::event::MouseButton::$button),
202 column: $col,
203 row: $row,
204 modifiers: $crate::crossterm::modifiers::NONE,
205 })
206 };
207 (mouse down $mod:ident-$button:ident for $col:ident, $row:ident ) => {
208 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
209 kind: crossterm::event::MouseEventKind::Down(crossterm::event::MouseButton::$button),
210 column: $col,
211 row: $row,
212 modifiers: $crate::crossterm::modifiers::$mod,
213 })
214 };
215 (mouse up $button:ident for $col:ident, $row:ident ) => {
216 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
217 kind: crossterm::event::MouseEventKind::Up(crossterm::event::MouseButton::$button),
218 column: $col,
219 row: $row,
220 modifiers: $crate::crossterm::modifiers::NONE,
221 })
222 };
223 (mouse up $mod:ident-$button:ident for $col:ident, $row:ident ) => {
224 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
225 kind: crossterm::event::MouseEventKind::Up(crossterm::event::MouseButton::$button),
226 column: $col,
227 row: $row,
228 modifiers: $crate::crossterm::modifiers::$mod,
229 })
230 };
231 (mouse drag $button:ident for $col:ident, $row:ident ) => {
232 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
233 kind: crossterm::event::MouseEventKind::Drag(crossterm::event::MouseButton::$button),
234 column: $col,
235 row: $row,
236 modifiers: $crate::crossterm::modifiers::NONE,
237 })
238 };
239 (mouse drag $mod:ident-$button:ident for $col:ident, $row:ident ) => {
240 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
241 kind: crossterm::event::MouseEventKind::Drag(crossterm::event::MouseButton::$button),
242 column: $col,
243 row: $row,
244 modifiers: $crate::crossterm::modifiers::$mod,
245 })
246 };
247
248
249 (mouse any for $mouse:ident) => {
250 crossterm::event::Event::Mouse($mouse)
251 };
252 (mouse any $mod:ident for $mouse:ident ) => {
253 crossterm::event::Event::Mouse($mouse @ crossterm::event::MouseEvent {
254 modifiers: $crate::crossterm::modifiers::$mod,
255 ..
256 })
257 };
258
259 (mouse moved ) => {
260 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
261 kind: crossterm::event::MouseEventKind::Moved,
262 modifiers: $crate::crossterm::modifiers::NONE,
263 ..
264 })
265 };
266 (mouse moved for $col:ident, $row:ident) => {
267 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
268 kind: crossterm::event::MouseEventKind::Moved,
269 column: $col,
270 row: $row,
271 modifiers: $crate::crossterm::modifiers::NONE,
272 })
273 };
274
275 (scroll $mod:ident down for $col:ident, $row:ident) => {
276 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
277 kind: crossterm::event::MouseEventKind::ScrollDown,
278 column: $col,
279 row: $row,
280 modifiers: $crate::crossterm::modifiers::$mod,
281 })
282 };
283 (scroll down for $col:ident, $row:ident) => {
284 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
285 kind: crossterm::event::MouseEventKind::ScrollDown,
286 column: $col,
287 row: $row,
288 modifiers: $crate::crossterm::modifiers::NONE,
289 })
290 };
291 (scroll down) => {
292 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
293 kind: crossterm::event::MouseEventKind::ScrollDown,
294 modifiers: $crate::crossterm::modifiers::NONE,
295 ..
296 })
297 };
298 (scroll $mod:ident up for $col:ident, $row:ident) => {
299 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
300 kind: crossterm::event::MouseEventKind::ScrollUp,
301 column: $col,
302 row: $row,
303 modifiers: $crate::crossterm::modifiers::$mod,
304 })
305 };
306 (scroll up for $col:ident, $row:ident) => {
307 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
308 kind: crossterm::event::MouseEventKind::ScrollUp,
309 column: $col,
310 row: $row,
311 modifiers: $crate::crossterm::modifiers::NONE,
312 })
313 };
314 (scroll up) => {
315 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
316 kind: crossterm::event::MouseEventKind::ScrollUp,
317 modifiers: $crate::crossterm::modifiers::NONE,
318 ..
319 })
320 };
321
322 (scroll left for $col:ident, $row:ident) => {
324 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
325 kind: crossterm::event::MouseEventKind::ScrollLeft,
326 column: $col,
327 row: $row,
328 modifiers: $crate::crossterm::modifiers::NONE,
329 })
330 };
331 (scroll left) => {
332 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
333 kind: crossterm::event::MouseEventKind::ScrollLeft,
334 modifiers: $crate::crossterm::modifiers::NONE,
335 ..
336 })
337 };
338 (scroll right for $col:ident, $row:ident) => {
340 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
341 kind: crossterm::event::MouseEventKind::ScrollRight,
342 column: $col,
343 row: $row,
344 modifiers: $crate::crossterm::modifiers::NONE,
345 })
346 };
347 (scroll right) => {
348 crossterm::event::Event::Mouse(crossterm::event::MouseEvent {
349 kind: crossterm::event::MouseEventKind::ScrollRight,
350 modifiers: $crate::crossterm::modifiers::NONE,
351 ..
352 })
353 };
354
355 (resized) => {
356 crossterm::event::Event::Resize(_, _)
357 };
358 (resized for $cols:ident, $rows:ident ) => {
359 crossterm::event::Event::Resize($cols, $rows)
360 };
361 (focus_gained) => {
362 crossterm::event::Event::FocusGained
363 };
364 (focus_lost) => {
365 crossterm::event::Event::FocusLost
366 };
367 (paste $value:ident) => {
368 crossterm::event::Event::Paste($value)
369 };
370}