Add \ in normal mode to disable user hooks on next normal command

Fixes #112
This commit is contained in:
Maxime Coste 2014-06-21 22:06:02 +01:00
parent edd883ad18
commit b89b7c754f

View File

@ -82,16 +82,33 @@ public:
void on_key(Key key) override void on_key(Key key) override
{ {
bool do_restore_hooks = false;
auto restore_hooks = on_scope_end([&, this]{
if (do_restore_hooks)
{
GlobalHooks::instance().enable_user_hooks();
m_disable_hooks = false;
}
});
if (key.modifiers == Key::Modifiers::None and isdigit(key.key)) if (key.modifiers == Key::Modifiers::None and isdigit(key.key))
m_count = m_count * 10 + key.key - '0'; m_count = m_count * 10 + key.key - '0';
else if (key == Key::Backspace) else if (key == Key::Backspace)
m_count /= 10; m_count /= 10;
else if (key == '\\')
m_disable_hooks = true;
else else
{ {
if (m_disable_hooks)
{
GlobalHooks::instance().disable_user_hooks();
do_restore_hooks = true;
}
auto it = keymap.find(key); auto it = keymap.find(key);
if (it != keymap.end()) if (it != keymap.end())
it->second(context(), m_count); it->second(context(), m_count);
m_count = 0; m_count = 0;
} }
context().hooks().run_hook("NormalKey", key_to_str(key), context()); context().hooks().run_hook("NormalKey", key_to_str(key), context());
m_idle_timer.set_next_date(Clock::now() + idle_timeout); m_idle_timer.set_next_date(Clock::now() + idle_timeout);
@ -107,6 +124,7 @@ public:
private: private:
int m_count = 0; int m_count = 0;
bool m_disable_hooks = false;
Timer m_idle_timer; Timer m_idle_timer;
Timer m_fs_check_timer; Timer m_fs_check_timer;
}; };