diff options
Diffstat (limited to 'src/input_handler.cc')
| -rw-r--r-- | src/input_handler.cc | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/input_handler.cc b/src/input_handler.cc index eb809b5f..15156c2b 100644 --- a/src/input_handler.cc +++ b/src/input_handler.cc @@ -1307,7 +1307,7 @@ public: } else if (key == ctrl('n') or key == ctrl('p') or key.modifiers == Key::Modifiers::MenuSelect) { - if (m_last_insert and not synthesized) + if (m_last_insert) m_last_insert->keys.pop_back(); bool relative = key.modifiers != Key::Modifiers::MenuSelect; int index = relative ? (key == ctrl('n') ? 1 : -1) : key.key; @@ -1656,20 +1656,22 @@ void InputHandler::handle_key(Key key) ++m_handle_key_level; auto dec = on_scope_end([this]{ --m_handle_key_level;} ); - if (m_last_insert.recording and m_handle_key_level <= 1) - m_last_insert.keys.push_back(key); + auto process_key = [&](Key k, bool synthesized) { + if (m_last_insert.recording and m_handle_key_level <= 1) + m_last_insert.keys.push_back(k); + current_mode().handle_key(k, synthesized); + }; const auto keymap_mode = current_mode().keymap_mode(); KeymapManager& keymaps = m_context.keymaps(); if (keymaps.is_mapped(key, keymap_mode) and not m_context.keymaps_disabled()) { ScopedSetBool noninteractive{context().noninteractive()}; - for (auto& k : keymaps.get_mapping_keys(key, keymap_mode)) - current_mode().handle_key(k, true); + process_key(k, true); } else - current_mode().handle_key(key, m_handle_key_level > 1); + process_key(key, m_handle_key_level > 1); // do not record the key that made us enter or leave recording mode, // and the ones that are triggered recursively by previous keys. |
