Skip to main content

indigo_term/
key.rs

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; // Unsupported
38        const REPORT_ALL_KEYS = 8;   // Supported, but only for keys we represent
39        const REPORT_TEXT = 16;      // Ignored, but safe to enable
40    }
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";