FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
event.hpp
Go to the documentation of this file.
1// Copyright 2020 Arthur Sonzogni. All rights reserved.
2// Use of this source code is governed by the MIT license that can be found in
3// the LICENSE file.
4#ifndef FTXUI_COMPONENT_EVENT_HPP
5#define FTXUI_COMPONENT_EVENT_HPP
6
7#include <ftxui/component/mouse.hpp> // for Mouse
8#include <memory>
9#include <string> // for string, operator==
10#include <string_view>
11#include <vector>
12
13namespace ftxui {
14
15class App;
16class ComponentBase;
17
18/// @brief Represent an event. It can be key press event, a terminal resize, or
19/// more ...
20///
21/// For example:
22/// - Printable character can be created using Event::Character('a').
23/// - Some special are predefined, like Event::ArrowLeft.
24/// - One can find arbitrary code for special Events using:
25/// ./example/util/print_key_press
26/// For instance, CTLR+A maps to Event::Special({1});
27///
28/// Useful documentation about xterm specification:
29/// https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
30///
31/// @ingroup component
32struct Event {
33 // --- Constructor section ---------------------------------------------------
34 static Event Character(std::string_view);
35 static Event Character(char);
36 static Event Character(wchar_t);
37 static Event Special(std::string_view);
38 static Event Special(std::initializer_list<char>);
39 static Event Mouse(std::string_view, Mouse mouse);
40 static Event CursorPosition(std::string_view, int x, int y); // Internal
41 static Event CursorShape(std::string_view, int shape); // Internal
42 static Event TerminalNameVersion(std::string_view,
43 std::string name,
44 int version);
45 static Event TerminalEmulator(std::string_view,
46 std::string name,
47 std::string version);
48 static Event TerminalCapabilities(std::string_view,
49 std::vector<int> capabilities);
50
51 // --- Arrow ---
52 static const Event ArrowLeft;
53 static const Event ArrowRight;
54 static const Event ArrowUp;
55 static const Event ArrowDown;
56
57 static const Event ArrowLeftCtrl;
58 static const Event ArrowRightCtrl;
59 static const Event ArrowUpCtrl;
60 static const Event ArrowDownCtrl;
61
62 // --- Other ---
63 static const Event Backspace;
64 static const Event Delete;
65 static const Event Return;
66 static const Event Escape;
67 static const Event Tab;
68 static const Event TabReverse;
69
70 // --- Navigation keys ---
71 static const Event Insert;
72 static const Event Home;
73 static const Event End;
74 static const Event PageUp;
75 static const Event PageDown;
76
77 // --- Function keys ---
78 static const Event F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12;
79
80 // --- Control keys ---
81 static const Event a, A, CtrlA, AltA, CtrlAltA;
82 static const Event b, B, CtrlB, AltB, CtrlAltB;
83 static const Event c, C, CtrlC, AltC, CtrlAltC;
84 static const Event d, D, CtrlD, AltD, CtrlAltD;
85 static const Event e, E, CtrlE, AltE, CtrlAltE;
86 static const Event f, F, CtrlF, AltF, CtrlAltF;
87 static const Event g, G, CtrlG, AltG, CtrlAltG;
88 static const Event h, H, CtrlH, AltH, CtrlAltH;
89 static const Event i, I, CtrlI, AltI, CtrlAltI;
90 static const Event j, J, CtrlJ, AltJ, CtrlAltJ;
91 static const Event k, K, CtrlK, AltK, CtrlAltK;
92 static const Event l, L, CtrlL, AltL, CtrlAltL;
93 static const Event m, M, CtrlM, AltM, CtrlAltM;
94 static const Event n, N, CtrlN, AltN, CtrlAltN;
95 static const Event o, O, CtrlO, AltO, CtrlAltO;
96 static const Event p, P, CtrlP, AltP, CtrlAltP;
97 static const Event q, Q, CtrlQ, AltQ, CtrlAltQ;
98 static const Event r, R, CtrlR, AltR, CtrlAltR;
99 static const Event s, S, CtrlS, AltS, CtrlAltS;
100 static const Event t, T, CtrlT, AltT, CtrlAltT;
101 static const Event u, U, CtrlU, AltU, CtrlAltU;
102 static const Event v, V, CtrlV, AltV, CtrlAltV;
103 static const Event w, W, CtrlW, AltW, CtrlAltW;
104 static const Event x, X, CtrlX, AltX, CtrlAltX;
105 static const Event y, Y, CtrlY, AltY, CtrlAltY;
106 static const Event z, Z, CtrlZ, AltZ, CtrlAltZ;
107
108 // --- Custom ---
109 static const Event Custom;
110
111 //--- Method section ---------------------------------------------------------
112 bool operator==(const Event& other) const { return input_ == other.input_; }
113 bool operator!=(const Event& other) const { return !operator==(other); }
114 bool operator<(const Event& other) const { return input_ < other.input_; }
115
116 const std::string& input() const { return input_; }
117
118 bool is_character() const { return type_ == Type::Character; }
119 std::string character() const { return input_; }
120
121 bool is_mouse() const { return type_ == Type::Mouse; }
122 struct Mouse& mouse() { return data_.mouse; }
123
124 // --- Internal Method section -----------------------------------------------
125 bool is_cursor_position() const { return type_ == Type::CursorPosition; }
126 int cursor_x() const { return data_.cursor.x; }
127 int cursor_y() const { return data_.cursor.y; }
128
129 bool is_cursor_shape() const { return type_ == Type::CursorShape; }
130 int cursor_shape() const { return data_.cursor_shape; }
131
132 bool IsTerminalNameVersion() const;
133 const std::string& TerminalName() const;
134 int TerminalVersion() const;
135
136 bool IsTerminalEmulator() const;
137 const std::string& TerminalEmulatorName() const;
138 const std::string& TerminalEmulatorVersion() const;
139
140 bool IsTerminalCapabilities() const;
141 const std::vector<int>& TerminalCapabilities() const;
142 std::vector<std::string> TerminalCapabilityNames() const;
143
144 // Debug
145 std::string DebugString() const;
146
147 //--- State section ----------------------------------------------------------
148 App* screen_ = nullptr;
149
150 private:
151 friend ComponentBase;
152 friend App;
153 enum class Type {
154 Unknown,
155 Character,
156 Mouse,
157 CursorPosition,
158 CursorShape,
159 TerminalNameVersion,
160 TerminalEmulator,
162 };
163 Type type_ = Type::Unknown;
164
165 struct Cursor {
166 int x = 0;
167 int y = 0;
168 };
169
170 union {
171 struct Mouse mouse;
172 struct Cursor cursor;
175 } data_ = {};
176
177 std::string input_;
178 std::shared_ptr<std::string> terminal_name_;
179 std::shared_ptr<std::string> terminal_emulator_version_;
180 std::shared_ptr<std::vector<int>> terminal_capabilities_;
181};
182
183} // namespace ftxui
184
185#endif /* end of include guard: FTXUI_COMPONENT_EVENT_HPP */
static const Event TabReverse
Definition event.hpp:68
int cursor_shape() const
Definition event.hpp:130
static const Event j
Definition event.hpp:90
static const Event CtrlC
Definition event.hpp:83
static const Event CtrlP
Definition event.hpp:96
static const Event CtrlV
Definition event.hpp:102
static const Event ArrowLeftCtrl
Definition event.hpp:57
static const Event CtrlL
Definition event.hpp:92
static const Event AltT
Definition event.hpp:100
std::string character() const
Definition event.hpp:119
bool IsTerminalEmulator() const
Whether the event is a terminal emulator report.
Definition event.cpp:223
static const Event w
Definition event.hpp:103
static const Event CtrlAltX
Definition event.hpp:104
static const Event D
Definition event.hpp:84
static const Event CtrlAltN
Definition event.hpp:94
static const Event a
Definition event.hpp:81
static const Event AltH
Definition event.hpp:88
static const Event AltF
Definition event.hpp:86
static Event TerminalNameVersion(std::string_view, std::string name, int version)
An event corresponding to a terminal name and version report.
Definition event.cpp:78
int terminal_version
Definition event.hpp:174
static const Event K
Definition event.hpp:91
int cursor_y() const
Definition event.hpp:127
static const Event T
Definition event.hpp:100
static const Event CtrlAltC
Definition event.hpp:83
static const Event X
Definition event.hpp:104
int cursor_x() const
Definition event.hpp:126
static const Event CtrlE
Definition event.hpp:85
static const Event Q
Definition event.hpp:97
static const Event u
Definition event.hpp:101
static const Event PageUp
Definition event.hpp:74
static const Event h
Definition event.hpp:88
static const Event CtrlAltF
Definition event.hpp:86
static const Event CtrlZ
Definition event.hpp:106
static const Event J
Definition event.hpp:90
int cursor_shape
Definition event.hpp:173
static const Event CtrlU
Definition event.hpp:101
static const Event AltQ
Definition event.hpp:97
static const Event b
Definition event.hpp:82
static const Event Escape
Definition event.hpp:66
static const Event AltY
Definition event.hpp:105
static const Event CtrlAltI
Definition event.hpp:89
bool is_mouse() const
Definition event.hpp:121
static const Event AltL
Definition event.hpp:92
App * screen_
Definition event.hpp:148
static Event CursorPosition(std::string_view, int x, int y)
Definition event.cpp:255
static const Event AltW
Definition event.hpp:103
static const Event F12
Definition event.hpp:78
struct Mouse & mouse()
Definition event.hpp:122
static const Event E
Definition event.hpp:85
static const Event m
Definition event.hpp:93
static const Event N
Definition event.hpp:94
bool is_cursor_position() const
Definition event.hpp:125
static const Event CtrlAltP
Definition event.hpp:96
static const Event CtrlAltE
Definition event.hpp:85
static const Event F5
Definition event.hpp:78
static const Event CtrlF
Definition event.hpp:86
static const Event F3
Definition event.hpp:78
static const Event CtrlAltJ
Definition event.hpp:90
static const Event z
Definition event.hpp:106
static const Event AltK
Definition event.hpp:91
static const Event B
Definition event.hpp:82
static const Event H
Definition event.hpp:88
int TerminalVersion() const
Return the terminal version.
Definition event.cpp:208
static const Event CtrlX
Definition event.hpp:104
static const Event F9
Definition event.hpp:78
static const Event AltC
Definition event.hpp:83
static const Event CtrlB
Definition event.hpp:82
std::vector< std::string > TerminalCapabilityNames() const
Return the names of the terminal capabilities.
Definition event.cpp:116
static const Event CtrlAltH
Definition event.hpp:88
static const Event O
Definition event.hpp:95
bool IsTerminalCapabilities() const
Whether the event is a terminal capabilities report.
Definition event.cpp:213
static const Event R
Definition event.hpp:98
static const Event AltM
Definition event.hpp:93
static const Event CtrlR
Definition event.hpp:98
static const Event CtrlAltW
Definition event.hpp:103
static Event Special(std::string_view)
An custom event whose meaning is defined by the user of the library.
Definition event.cpp:240
static const Event CtrlAltO
Definition event.hpp:95
bool IsTerminalNameVersion() const
Whether the event is a terminal name and version report.
Definition event.cpp:198
static const Event CtrlY
Definition event.hpp:105
static const Event Custom
Definition event.hpp:109
static const Event A
Definition event.hpp:81
static Event Character(std::string_view)
An event corresponding to a given typed character.
Definition event.cpp:33
static const Event AltG
Definition event.hpp:87
static const Event p
Definition event.hpp:96
static const Event l
Definition event.hpp:92
static const Event CtrlH
Definition event.hpp:88
bool operator<(const Event &other) const
Definition event.hpp:114
struct Mouse mouse
Definition event.hpp:171
std::string DebugString() const
Return a string representation of the event.
Definition event.cpp:264
static const Event AltO
Definition event.hpp:95
static const Event CtrlJ
Definition event.hpp:90
static const Event CtrlAltM
Definition event.hpp:93
static const Event CtrlS
Definition event.hpp:99
const std::string & TerminalName() const
Return the terminal name.
Definition event.cpp:203
static const Event Z
Definition event.hpp:106
static const Event AltR
Definition event.hpp:98
static const Event CtrlW
Definition event.hpp:103
static const Event CtrlN
Definition event.hpp:94
static const Event F2
Definition event.hpp:78
static const Event CtrlM
Definition event.hpp:93
static const Event G
Definition event.hpp:87
static const Event Backspace
Definition event.hpp:63
static const Event d
Definition event.hpp:84
static const Event CtrlAltR
Definition event.hpp:98
static const Event CtrlK
Definition event.hpp:91
static const Event x
Definition event.hpp:104
static const Event F7
Definition event.hpp:78
static const Event ArrowUp
Definition event.hpp:54
const std::string & input() const
Definition event.hpp:116
static const Event Tab
Definition event.hpp:67
static const Event r
Definition event.hpp:98
static const Event AltU
Definition event.hpp:101
static const Event CtrlQ
Definition event.hpp:97
static const Event CtrlAltZ
Definition event.hpp:106
static const Event AltN
Definition event.hpp:94
static const Event AltA
Definition event.hpp:81
static const Event ArrowDown
Definition event.hpp:55
struct Cursor cursor
Definition event.hpp:172
static const Event End
Definition event.hpp:73
static const Event F11
Definition event.hpp:78
static const Event CtrlG
Definition event.hpp:87
static const Event n
Definition event.hpp:94
static const Event q
Definition event.hpp:97
static const Event AltZ
Definition event.hpp:106
static const Event Home
Definition event.hpp:72
static const Event C
Definition event.hpp:83
static const Event AltD
Definition event.hpp:84
static const Event CtrlAltY
Definition event.hpp:105
static const Event AltJ
Definition event.hpp:90
static const Event F8
Definition event.hpp:78
static const Event CtrlAltL
Definition event.hpp:92
static const Event U
Definition event.hpp:101
const std::string & TerminalEmulatorVersion() const
Return the terminal emulator version.
Definition event.cpp:233
static const Event o
Definition event.hpp:95
static const Event AltB
Definition event.hpp:82
static const Event F4
Definition event.hpp:78
static const Event t
Definition event.hpp:100
static Event CursorShape(std::string_view, int shape)
An event corresponding to a terminal DCS (Device Control String).
Definition event.cpp:68
static const Event y
Definition event.hpp:105
static const Event ArrowUpCtrl
Definition event.hpp:59
static const Event k
Definition event.hpp:91
static const Event CtrlAltS
Definition event.hpp:99
static const Event s
Definition event.hpp:99
static const Event I
Definition event.hpp:89
static const Event CtrlT
Definition event.hpp:100
static Event TerminalEmulator(std::string_view, std::string name, std::string version)
An event corresponding to a terminal emulator report.
Definition event.cpp:91
static const Event F
Definition event.hpp:86
static const Event AltI
Definition event.hpp:89
static const Event F10
Definition event.hpp:78
const std::vector< int > & TerminalCapabilities() const
Return the terminal capabilities.
Definition event.cpp:218
static const Event AltP
Definition event.hpp:96
static const Event PageDown
Definition event.hpp:75
static const Event Y
Definition event.hpp:105
static const Event CtrlAltK
Definition event.hpp:91
static const Event F6
Definition event.hpp:78
static const Event CtrlAltG
Definition event.hpp:87
static const Event CtrlA
Definition event.hpp:81
static const Event i
Definition event.hpp:89
static const Event AltS
Definition event.hpp:99
static const Event g
Definition event.hpp:87
static const Event F1
Definition event.hpp:78
static const Event S
Definition event.hpp:99
static const Event Return
Definition event.hpp:65
static const Event CtrlAltU
Definition event.hpp:101
bool operator==(const Event &other) const
Definition event.hpp:112
static const Event V
Definition event.hpp:102
const std::string & TerminalEmulatorName() const
Return the terminal emulator name.
Definition event.cpp:228
static const Event CtrlAltT
Definition event.hpp:100
static const Event CtrlAltA
Definition event.hpp:81
static const Event AltE
Definition event.hpp:85
static const Event P
Definition event.hpp:96
static const Event CtrlD
Definition event.hpp:84
static const Event ArrowLeft
Definition event.hpp:52
static const Event CtrlAltB
Definition event.hpp:82
bool operator!=(const Event &other) const
Definition event.hpp:113
static const Event AltV
Definition event.hpp:102
static const Event v
Definition event.hpp:102
static const Event e
Definition event.hpp:85
bool is_character() const
Definition event.hpp:118
static const Event CtrlO
Definition event.hpp:95
static const Event Delete
Definition event.hpp:64
static const Event CtrlAltV
Definition event.hpp:102
static const Event ArrowDownCtrl
Definition event.hpp:60
static const Event AltX
Definition event.hpp:104
static const Event CtrlAltD
Definition event.hpp:84
static const Event L
Definition event.hpp:92
static const Event W
Definition event.hpp:103
static const Event f
Definition event.hpp:86
static const Event Insert
Definition event.hpp:71
static const Event CtrlI
Definition event.hpp:89
static const Event ArrowRightCtrl
Definition event.hpp:58
bool is_cursor_shape() const
Definition event.hpp:129
static const Event c
Definition event.hpp:83
static const Event CtrlAltQ
Definition event.hpp:97
static const Event M
Definition event.hpp:93
static const Event ArrowRight
Definition event.hpp:53
App is a Screen that can handle events, run a main loop, and manage components.
Definition app.hpp:36
It implement rendering itself as ftxui::Element. It implement keyboard navigation by responding to ft...
Represent an event. It can be key press event, a terminal resize, or more ...
Definition event.hpp:32
A mouse event. It contains the coordinate of the mouse, the button pressed and the modifier (shift,...
Definition mouse.hpp:11
The FTXUI ftxui:: namespace.
Definition animation.hpp:10