diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2016-11-02 23:12:57 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2016-11-02 23:12:57 +0000 |
| commit | 6347787cf2662436a942fe9208f0af7f070fc324 (patch) | |
| tree | 054c18e9c6cc1c3e591e1b6d7563ce77fb5cbb14 | |
| parent | 9ca0467c4d568b2c8fd1f35d549957f08ab27a13 (diff) | |
Propagate NormalParams to user mappings
Closes #896
| -rw-r--r-- | src/input_handler.cc | 14 | ||||
| -rw-r--r-- | src/input_handler.hh | 2 | ||||
| -rw-r--r-- | 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<InputModes::Normal*>(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) |
