From dbe8528231f61717210f796c93c85b852b760b33 Mon Sep 17 00:00:00 2001 From: Tobias Pisani Date: Fri, 23 Feb 2024 16:53:30 +0100 Subject: Make insert repeat (.) more consistent Insert repeat will now only record non-synthesized keys, and when played back execute mappings as well. Constructing some tests, and with the specific goal of fixing https://github.com/alexherbo2/auto-pairs.kak/issues/38, this appeared to be the best approach. Other options could be evaluating the maps only when recording, but this gave other issues (see tests/normal/repeat-insert/repeat-insert-mapped) At this point, repeat-insert may be essentially just a hardcoded macro, at least I haven't identified the difference. If this really is the case, it may make sense to give it a dedicated register, and implement it as a macro. Fixes #3600 --- src/input_handler.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/input_handler.cc') diff --git a/src/input_handler.cc b/src/input_handler.cc index 17e72874..9d81f711 100644 --- a/src/input_handler.cc +++ b/src/input_handler.cc @@ -1582,7 +1582,7 @@ void InputHandler::repeat_last_insert() // refill last_insert, this is very inefficient, but necessary at the moment // to properly handle insert completion m_last_insert.keys.push_back(key); - current_mode().handle_key(key, true); + handle_key(key); } kak_assert(dynamic_cast(¤t_mode()) != nullptr); } @@ -1655,11 +1655,12 @@ void InputHandler::handle_key(Key key) auto dec = on_scope_end([this]{ --m_handle_key_level;} ); auto process_key = [&](Key key, bool synthesized) { - if (m_last_insert.recording) - m_last_insert.keys.push_back(key); current_mode().handle_key(key, synthesized); }; + if (m_last_insert.recording and m_handle_key_level <= 1) + m_last_insert.keys.push_back(key); + 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()) -- cgit v1.2.3