summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-11-02 23:12:57 +0000
committerMaxime Coste <frrrwww@gmail.com>2016-11-02 23:12:57 +0000
commit6347787cf2662436a942fe9208f0af7f070fc324 (patch)
tree054c18e9c6cc1c3e591e1b6d7563ce77fb5cbb14
parent9ca0467c4d568b2c8fd1f35d549957f08ab27a13 (diff)
Propagate NormalParams to user mappings
Closes #896
-rw-r--r--src/input_handler.cc14
-rw-r--r--src/input_handler.hh2
-rw-r--r--src/normal.cc2
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)