diff --git a/src/context.hh b/src/context.hh index baea4442..05e5e59c 100644 --- a/src/context.hh +++ b/src/context.hh @@ -97,9 +97,6 @@ struct Context ui().print_status(status); } - using Insertion = std::pair>; - Insertion& last_insert() { return m_last_insert; } - void push_jump() { const SelectionList& jump = editor().selections(); @@ -162,7 +159,6 @@ private: InputHandler* m_input_handler = nullptr; safe_ptr m_ui; - Insertion m_last_insert = {InsertMode::Insert, {}}; int m_numeric_param = 0; using JumpList = std::vector; diff --git a/src/input_handler.cc b/src/input_handler.cc index db4aede4..19730ca5 100644 --- a/src/input_handler.cc +++ b/src/input_handler.cc @@ -23,6 +23,10 @@ public: virtual void on_key(const Key& key) = 0; Context& context() const { return m_input_handler.context(); } + + using Insertion = InputHandler::Insertion; + Insertion& last_insert() { return m_input_handler.m_last_insert; } + protected: void reset_normal_mode(); private: @@ -535,14 +539,14 @@ public: } }} { - context().last_insert().first = mode; - context().last_insert().second.clear(); + last_insert().first = mode; + last_insert().second.clear(); context().hooks().run_hook("InsertBegin", "", context()); } void on_key(const Key& key) override { - context().last_insert().second.push_back(key); + last_insert().second.push_back(key); if (m_insert_reg) { if (key.modifiers == Key::Modifiers::None) @@ -640,16 +644,15 @@ void InputHandler::insert(InsertMode mode) void InputHandler::repeat_last_insert() { - Context::Insertion& last_insert = m_context.last_insert(); - if (last_insert.second.empty()) + if (m_last_insert.second.empty()) return; std::vector keys; - swap(keys, last_insert.second); + swap(keys, m_last_insert.second); // context.last_insert will be refilled by the new Insert // this is very inefficient. m_mode_trash.emplace_back(std::move(m_mode)); - m_mode.reset(new InputModes::Insert(*this, last_insert.first)); + m_mode.reset(new InputModes::Insert(*this, m_last_insert.first)); for (auto& key : keys) m_mode->on_key(key); assert(dynamic_cast(m_mode.get()) != nullptr); diff --git a/src/input_handler.hh b/src/input_handler.hh index 6b260dcb..9089273d 100644 --- a/src/input_handler.hh +++ b/src/input_handler.hh @@ -71,6 +71,9 @@ private: friend class InputMode; std::unique_ptr m_mode; std::vector> m_mode_trash; + + using Insertion = std::pair>; + Insertion m_last_insert = {InsertMode::Insert, {}}; }; struct prompt_aborted {};