1use bitflags::bitflags;
2use std::fmt::{self, Display};
3
4#[derive(Debug, PartialEq)]
5pub struct Key {
6 pub code: KeyCode,
7 pub modifiers: KeyModifiers,
8}
9
10#[derive(Debug, PartialEq)]
11pub enum KeyCode {
12 Esc,
13 Backspace,
14 Tab,
15 Enter,
16 Left,
17 Right,
18 Up,
19 Down,
20 Char(char),
21}
22
23bitflags! {
24 #[derive(Debug, PartialEq)]
25 pub struct KeyModifiers: u8 {
26 const SHIFT = 1;
27 const ALT = 2;
28 const CTRL = 4;
29 }
30}
31
32bitflags! {
33 #[derive(Debug, PartialEq)]
34 pub struct KeyboardEnhancementFlags: u8 {
35 const DISAMBIGUATE = 1;
36 const REPORT_EVENTS = 2;
37 const REPORT_ALTERNATES = 4; const REPORT_ALL_KEYS = 8; const REPORT_TEXT = 16; }
41}
42
43impl Display for KeyboardEnhancementFlags {
44 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45 write!(f, "{}", self.bits())
46 }
47}
48
49pub struct KeyboardEnhancementFlagsPush(pub KeyboardEnhancementFlags);
50
51impl Display for KeyboardEnhancementFlagsPush {
52 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
53 write!(f, "\x1b[>{}u", self.0)
54 }
55}
56
57pub struct KeyboardEnhancementFlagsPop;
58
59impl Display for KeyboardEnhancementFlagsPop {
60 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
61 write!(f, "\x1b[<1u")
62 }
63}
64
65pub const KEYBOARD_ENHANCEMENT_FLAGS_QUERY: &str = "\x1b[?u";