From 160b1c8bbc79f03145cee766f3339d92b77ce326 Mon Sep 17 00:00:00 2001 From: d Date: Sun, 28 Mar 2021 02:01:04 +0200 Subject: [PATCH] Added Home, End, PageUp, PageDown events. Added handling for Home and End for input component --- include/ftxui/component/event.hpp | 7 +++++++ src/ftxui/component/event.cpp | 5 +++++ src/ftxui/component/input.cpp | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/include/ftxui/component/event.hpp b/include/ftxui/component/event.hpp index 14e826a..b006f49 100644 --- a/include/ftxui/component/event.hpp +++ b/include/ftxui/component/event.hpp @@ -44,6 +44,12 @@ struct Event { static const Event TabReverse; static const Event F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12; + static const Event Home; + static const Event End; + + static const Event PageUp; + static const Event PageDown; + // --- Custom --- static Event Custom; @@ -53,6 +59,7 @@ struct Event { const std::string& input() const { return input_; } bool operator==(const Event& other) const { return input_ == other.input_; } + bool operator!=(const Event& other) const { return !operator==(other); } //--- State section ---------------------------------------------------------- private: diff --git a/src/ftxui/component/event.cpp b/src/ftxui/component/event.cpp index 29fc9c1..b8c6d7a 100644 --- a/src/ftxui/component/event.cpp +++ b/src/ftxui/component/event.cpp @@ -62,6 +62,11 @@ const Event Event::F9 = Event::Special("\x1B[20~"); const Event Event::F10 = Event::Special("\x1B[21~"); const Event Event::F11 = Event::Special("\x1B[21~"); // Doesn't exist const Event Event::F12 = Event::Special("\x1B[24~"); +const Event Event::Home = Event::Special({27, 91, 72}); +const Event Event::End = Event::Special({27, 91, 70}); +const Event Event::PageUp = Event::Special({27, 91, 53, 126}); +const Event Event::PageDown = Event::Special({27, 91, 54, 126}); + Event Event::Custom = Event::Special({0}); } // namespace ftxui diff --git a/src/ftxui/component/input.cpp b/src/ftxui/component/input.cpp index 7a76055..0223c94 100644 --- a/src/ftxui/component/input.cpp +++ b/src/ftxui/component/input.cpp @@ -85,6 +85,16 @@ bool Input::OnEvent(Event event) { return true; } + if (event == Event::Home) { + cursor_position = 0; + return true; + } + + if (event == Event::End) { + cursor_position = (int)content.size(); + return true; + } + // Content if (event.is_character()) { content.insert(cursor_position, 1, event.character());