5#include <initializer_list>
20#pragma clang diagnostic ignored "-Wshadow"
22#pragma GCC diagnostic ignored "-Wshadow"
23#elif defined(_MSC_VER)
24#pragma warning(disable : 6244)
25#pragma warning(disable : 6246)
33Event Event::Character(std::string_view input) {
35 event.input_ = std::string(
input);
36 event.type_ = Type::Character;
44 return Event::Character(std::string{
c});
50Event Event::Character(
wchar_t c) {
51 return Event::Character(
to_string(std::wstring{
c}));
58Event Event::Mouse(std::string_view input,
struct Mouse mouse) {
60 event.input_ = std::string(
input);
61 event.type_ = Type::Mouse;
62 event.data_.mouse =
mouse;
68Event Event::CursorShape(std::string_view input,
int shape) {
70 event.input_ = std::string(
input);
71 event.type_ = Type::CursorShape;
72 event.data_.cursor_shape = shape;
78Event Event::TerminalNameVersion(std::string_view input,
82 event.input_ = std::string(
input);
83 event.type_ = Type::TerminalNameVersion;
84 event.terminal_name_ = std::make_shared<std::string>(std::move(name));
85 event.data_.terminal_version = version;
91Event Event::TerminalEmulator(std::string_view input,
93 std::string version) {
95 event.input_ = std::string(
input);
96 event.type_ = Type::TerminalEmulator;
97 event.terminal_name_ = std::make_shared<std::string>(std::move(name));
98 event.terminal_emulator_version_ =
99 std::make_shared<std::string>(std::move(version));
106 std::vector<int> capabilities) {
108 event.input_ = std::string(
input);
109 event.type_ = Type::TerminalCapabilities;
110 event.terminal_capabilities_ =
111 std::make_shared<std::vector<int>>(std::move(capabilities));
117 if (type_ != Type::TerminalCapabilities) {
121 std::vector<std::string> names;
122 for (
const int cap : *terminal_capabilities_) {
127 names.emplace_back(
"132-columns");
130 names.emplace_back(
"Printer-port");
133 names.emplace_back(
"ReGIS-graphics");
136 names.emplace_back(
"Sixel-graphics");
139 names.emplace_back(
"Selective-erase");
142 names.emplace_back(
"Soft-character-set-(DRCS)");
145 names.emplace_back(
"User-defined-keys-(UDK)");
148 names.emplace_back(
"National-replacement-character-sets-(NRC)");
151 names.emplace_back(
"Local-editing");
154 names.emplace_back(
"Technical-character-set");
157 names.emplace_back(
"Windowing-capability");
160 names.emplace_back(
"Horizontal-scrolling");
163 names.emplace_back(
"ANSI-color");
166 names.emplace_back(
"Font-loading");
169 names.emplace_back(
"ANSI-text-locator-(Mouse)");
172 names.emplace_back(
"UTF-8");
175 names.emplace_back(
"VT510");
178 names.emplace_back(
"VT220");
181 names.emplace_back(
"VT320");
184 names.emplace_back(
"VT420");
187 names.emplace_back(
"VT525");
190 names.emplace_back(
"Unknown-" + std::to_string(cap));
199 return type_ == Type::TerminalNameVersion;
204 return *terminal_name_;
209 return data_.terminal_version;
214 return type_ == Type::TerminalCapabilities;
219 return *terminal_capabilities_;
224 return type_ == Type::TerminalEmulator;
229 return *terminal_name_;
234 return *terminal_emulator_version_;
242 event.input_ = std::string(
input);
255Event Event::CursorPosition(std::string_view input,
int x,
int y) {
257 event.input_ = std::string(
input);
258 event.type_ = Type::CursorPosition;
259 event.data_.cursor = {
x,
y};
265 static std::map<Event, const char*> event_to_string = {
395 static std::map<Mouse::Button, const char*> mouse_button_string = {
406 static std::map<Mouse::Motion, const char*> mouse_motion_string = {
413 case Type::Character: {
414 return "Event::Character(\"" + input_ +
"\")";
417 std::string out =
"Event::Mouse(\"...\", Mouse{";
418 out += std::string(mouse_button_string[data_.mouse.button]);
420 out += std::string(mouse_motion_string[data_.mouse.motion]);
422 if (data_.mouse.shift) {
423 out +=
".shift = true, ";
425 if (data_.mouse.meta) {
426 out +=
".meta = true, ";
428 if (data_.mouse.control) {
429 out +=
".control = true, ";
431 out +=
".x = " + std::to_string(data_.mouse.x);
433 out +=
".y = " + std::to_string(data_.mouse.y);
437 case Type::CursorShape:
438 return "Event::CursorShape(" + input_ +
", " +
439 std::to_string(data_.cursor_shape) +
")";
440 case Type::CursorPosition:
441 return "Event::CursorPosition(" + input_ +
", " +
442 std::to_string(data_.cursor.x) +
", " +
443 std::to_string(data_.cursor.y) +
")";
444 case Type::TerminalNameVersion:
445 return "Event::TerminalNameVersion(" + input_ +
", " + *terminal_name_ +
446 ", " + std::to_string(data_.terminal_version) +
")";
447 case Type::TerminalEmulator:
448 return "Event::TerminalEmulator(" + input_ +
", " + *terminal_name_ +
449 ", " + *terminal_emulator_version_ +
")";
450 case Type::TerminalCapabilities: {
451 std::string out =
"Event::TerminalCapabilities(" + input_ +
", {";
452 for (
size_t i = 0;
i < terminal_capabilities_->size(); ++
i) {
453 out += std::to_string((*terminal_capabilities_)[
i]);
454 if (
i + 1 < terminal_capabilities_->size()) {
462 auto event_it = event_to_string.find(*
this);
463 if (event_it != event_to_string.end()) {
464 return event_it->second;
514const Event
Event::a = Event::Character(
"a");
515const Event
Event::b = Event::Character(
"b");
516const Event
Event::c = Event::Character(
"c");
517const Event
Event::d = Event::Character(
"d");
518const Event
Event::e = Event::Character(
"e");
519const Event
Event::f = Event::Character(
"f");
520const Event
Event::g = Event::Character(
"g");
521const Event
Event::h = Event::Character(
"h");
522const Event
Event::i = Event::Character(
"i");
523const Event
Event::j = Event::Character(
"j");
524const Event
Event::k = Event::Character(
"k");
525const Event
Event::l = Event::Character(
"l");
526const Event
Event::m = Event::Character(
"m");
527const Event
Event::n = Event::Character(
"n");
528const Event
Event::o = Event::Character(
"o");
529const Event
Event::p = Event::Character(
"p");
530const Event
Event::q = Event::Character(
"q");
531const Event
Event::r = Event::Character(
"r");
532const Event
Event::s = Event::Character(
"s");
533const Event
Event::t = Event::Character(
"t");
534const Event
Event::u = Event::Character(
"u");
535const Event
Event::v = Event::Character(
"v");
536const Event
Event::w = Event::Character(
"w");
537const Event
Event::x = Event::Character(
"x");
538const Event
Event::y = Event::Character(
"y");
539const Event
Event::z = Event::Character(
"z");
541const Event
Event::A = Event::Character(
"A");
542const Event
Event::B = Event::Character(
"B");
543const Event
Event::C = Event::Character(
"C");
544const Event
Event::D = Event::Character(
"D");
545const Event
Event::E = Event::Character(
"E");
546const Event
Event::F = Event::Character(
"F");
547const Event
Event::G = Event::Character(
"G");
548const Event
Event::H = Event::Character(
"H");
549const Event
Event::I = Event::Character(
"I");
550const Event
Event::J = Event::Character(
"J");
551const Event
Event::K = Event::Character(
"K");
552const Event
Event::L = Event::Character(
"L");
553const Event
Event::M = Event::Character(
"M");
554const Event
Event::N = Event::Character(
"N");
555const Event
Event::O = Event::Character(
"O");
556const Event
Event::P = Event::Character(
"P");
557const Event
Event::Q = Event::Character(
"Q");
558const Event
Event::R = Event::Character(
"R");
559const Event
Event::S = Event::Character(
"S");
560const Event
Event::T = Event::Character(
"T");
561const Event
Event::U = Event::Character(
"U");
562const Event
Event::V = Event::Character(
"V");
563const Event
Event::W = Event::Character(
"W");
564const Event
Event::X = Event::Character(
"X");
565const Event
Event::Y = Event::Character(
"Y");
566const Event
Event::Z = Event::Character(
"Z");
static const Event TabReverse
@ WheelRight
Supported terminal only.
static const Event ArrowLeftCtrl
bool IsTerminalEmulator() const
Whether the event is a terminal emulator report.
static const Event CtrlAltX
static const Event CtrlAltN
static const Event CtrlAltC
static const Event PageUp
static const Event CtrlAltF
static const Event Escape
static const Event CtrlAltI
static const Event CtrlAltP
static const Event CtrlAltE
static const Event CtrlAltJ
int TerminalVersion() const
Return the terminal version.
std::vector< std::string > TerminalCapabilityNames() const
Return the names of the terminal capabilities.
static const Event CtrlAltH
bool IsTerminalCapabilities() const
Whether the event is a terminal capabilities report.
static const Event CtrlAltW
static Event Special(std::string_view)
An custom event whose meaning is defined by the user of the library.
static const Event CtrlAltO
bool IsTerminalNameVersion() const
Whether the event is a terminal name and version report.
static const Event Custom
std::string DebugString() const
Return a string representation of the event.
static const Event CtrlAltM
const std::string & TerminalName() const
Return the terminal name.
static const Event Backspace
static const Event CtrlAltR
static const Event ArrowUp
const std::string & input() const
static const Event CtrlAltZ
static const Event ArrowDown
static const Event CtrlAltY
static const Event CtrlAltL
const std::string & TerminalEmulatorVersion() const
Return the terminal emulator version.
static const Event ArrowUpCtrl
static const Event CtrlAltS
const std::vector< int > & TerminalCapabilities() const
Return the terminal capabilities.
static const Event PageDown
static const Event CtrlAltK
static const Event CtrlAltG
static const Event Return
static const Event CtrlAltU
const std::string & TerminalEmulatorName() const
Return the terminal emulator name.
static const Event CtrlAltT
static const Event CtrlAltA
static const Event ArrowLeft
static const Event CtrlAltB
static const Event Delete
static const Event CtrlAltV
static const Event ArrowDownCtrl
static const Event CtrlAltD
static const Event Insert
static const Event ArrowRightCtrl
static const Event CtrlAltQ
static const Event ArrowRight
Represent an event. It can be key press event, a terminal resize, or more ...
A mouse event. It contains the coordinate of the mouse, the button pressed and the modifier (shift,...
The FTXUI ftxui:: namespace.
std::string to_string(std::wstring_view s)
Convert a std::wstring into a UTF8 std::string.