1 use bitflags::bitflags;
2 
3 /// A parsed ANSI escape sequence.
4 ///
5 /// Check the [`Parser`](struct.Parser.html) structure documentation for examples
6 /// how to retrieve these values.
7 #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
8 pub enum Sequence {
9     /// A keyboard event sequence.
10     Key(KeyCode, KeyModifiers),
11     /// A mouse event sequence.
12     Mouse(Mouse, KeyModifiers),
13     /// A cursor position (`x`, `y`).
14     ///
15     /// Top/left cell is represented as `Sequence::CursorPosition(1, 1)`.
16     CursorPosition(u16, u16),
17 }
18 
19 bitflags! {
20     /// A key modifiers.
21     #[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
22     #[repr(transparent)]
23     pub struct KeyModifiers: u8 {
24         const SHIFT = 0b0000_0001;
25         const CONTROL = 0b0000_0010;
26         const ALT = 0b0000_0100;
27         const META = 0b0000_1000;
28     }
29 }
30 
31 /// A key code.
32 #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
33 pub enum KeyCode {
34     Backspace,
35     Enter,
36     Left,
37     Right,
38     Up,
39     Down,
40     Home,
41     End,
42     PageUp,
43     PageDown,
44     Tab,
45     BackTab,
46     Delete,
47     Insert,
48     F(u8),
49     Char(char),
50     Null,
51     Esc,
52 }
53 
54 /// A mouse event.
55 #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
56 pub enum Mouse {
57     /// A mouse button press.
58     Down(MouseButton, u16, u16),
59     /// A mouse button release.
60     Up(MouseButton, u16, u16),
61     /// A mouse movement with pressed button.
62     Drag(MouseButton, u16, u16),
63     /// A mouse wheel scrolled up.
64     ScrollUp(u16, u16),
65     /// A mouse wheel scrolled down.
66     ScrollDown(u16, u16),
67 }
68 
69 /// A mouse button.
70 #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
71 pub enum MouseButton {
72     Left,
73     Right,
74     Middle,
75     /// This variant is provided only if [`Parser`](struct.Parser.html) doesn't know which
76     /// mouse button was pressed/released.
77     ///
78     /// An example is [rxvt](https://en.wikipedia.org/wiki/Rxvt) - it provides which mouse
79     /// button was pressed, but doesn't provide which mouse button was released.
80     Any,
81 }
82