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