From 6347787cf2662436a942fe9208f0af7f070fc324 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Wed, 2 Nov 2016 23:12:57 +0000 Subject: [PATCH] Propagate NormalParams to user mappings Closes #896 --- src/input_handler.cc | 14 +++++++++----- src/input_handler.hh | 2 +- src/normal.cc | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/input_handler.cc b/src/input_handler.cc index 2b585f86..231d97f0 100644 --- a/src/input_handler.cc +++ b/src/input_handler.cc @@ -292,6 +292,8 @@ public: KeymapMode keymap_mode() const override { return KeymapMode::Normal; } private: + friend struct InputHandler::ScopedForceNormal; + NormalParams m_params = { 0, 0 }; bool m_hooks_disabled = false; bool m_enabled = false; @@ -1353,14 +1355,16 @@ void InputHandler::on_next_key(KeymapMode keymap_mode, KeyCallback callback) push_mode(new InputModes::NextKey(*this, keymap_mode, callback)); } -InputHandler::ScopedForceNormal::ScopedForceNormal(InputHandler& handler) +InputHandler::ScopedForceNormal::ScopedForceNormal(InputHandler& handler, NormalParams params) : m_handler(handler), m_mode(nullptr) { - if (handler.m_mode_stack.size() == 1) - return; + if (handler.m_mode_stack.size() != 1) + { + handler.push_mode(new InputModes::Normal(handler)); + m_mode = handler.m_mode_stack.back().get(); + } - handler.push_mode(new InputModes::Normal(handler)); - m_mode = handler.m_mode_stack.back().get(); + static_cast(handler.m_mode_stack.back().get())->m_params = params; } InputHandler::ScopedForceNormal::~ScopedForceNormal() diff --git a/src/input_handler.hh b/src/input_handler.hh index cc8ded68..14e9d048 100644 --- a/src/input_handler.hh +++ b/src/input_handler.hh @@ -94,7 +94,7 @@ public: // Force an input handler into normal mode temporarily struct ScopedForceNormal { - ScopedForceNormal(InputHandler& handler); + ScopedForceNormal(InputHandler& handler, NormalParams params); ~ScopedForceNormal(); private: diff --git a/src/normal.cc b/src/normal.cc index 921bb000..140dc4f4 100644 --- a/src/normal.cc +++ b/src/normal.cc @@ -1508,7 +1508,7 @@ void exec_user_mappings(Context& context, NormalParams params) auto mapping = context.keymaps().get_mapping(key, KeymapMode::User); ScopedSetBool disable_keymaps(context.keymaps_disabled()); - InputHandler::ScopedForceNormal force_normal{context.input_handler()}; + InputHandler::ScopedForceNormal force_normal{context.input_handler(), params}; ScopedEdition edition(context); for (auto& key : mapping)