aboutsummaryrefslogtreecommitdiff
path: root/src/parser/types.rs
blob: 66b6561fd9040609f9471fe9cee9c6f52ca22a0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
use bitflags::bitflags;

/// A parsed ANSI escape sequence.
///
/// Check the [`Parser`](struct.Parser.html) structure documentation for examples
/// how to retrieve these values.
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum Sequence {
    /// A keyboard event sequence.
    Key(KeyCode, KeyModifiers),
    /// A mouse event sequence.
    Mouse(Mouse, KeyModifiers),
    /// A cursor position (`x`, `y`).
    ///
    /// Top/left cell is represented as `Sequence::CursorPosition(1, 1)`.
    CursorPosition(u16, u16),
}

bitflags! {
    /// A key modifiers.
    pub struct KeyModifiers: u8 {
        const SHIFT = 0b0000_0001;
        const CONTROL = 0b0000_0010;
        const ALT = 0b0000_0100;
        const META = 0b0000_1000;
    }
}

/// A key code.
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum KeyCode {
    Backspace,
    Enter,
    Left,
    Right,
    Up,
    Down,
    Home,
    End,
    PageUp,
    PageDown,
    Tab,
    BackTab,
    Delete,
    Insert,
    F(u8),
    Char(char),
    Null,
    Esc,
}

/// A mouse event.
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum Mouse {
    /// A mouse button press.
    Down(MouseButton, u16, u16),
    /// A mouse button release.
    Up(MouseButton, u16, u16),
    /// A mouse movement with pressed button.
    Drag(MouseButton, u16, u16),
    /// A mouse wheel scrolled up.
    ScrollUp(u16, u16),
    /// A mouse wheel scrolled down.
    ScrollDown(u16, u16),
}

/// A mouse button.
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum MouseButton {
    Left,
    Right,
    Middle,
    /// This variant is provided only if [`Parser`](struct.Parser.html) doesn't know which
    /// mouse button was pressed/released.
    ///
    /// An example is [rxvt](https://en.wikipedia.org/wiki/Rxvt) - it provides which mouse
    /// button was pressed, but doesn't provide which mouse button was released.
    Any,
}