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
This commit is contained in:
parent
2d9c84e363
commit
dbe8528231
|
@ -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<InputModes::Normal*>(¤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())
|
||||
|
|
1
test/normal/repeat-insert/repeat-insert-hooks/cmd
Normal file
1
test/normal/repeat-insert/repeat-insert-hooks/cmd
Normal file
|
@ -0,0 +1 @@
|
|||
:hook -group h g InsertChar f %{exec FINSERTED}<ret>ifoo<esc>.\.\ifoo<esc>.
|
1
test/normal/repeat-insert/repeat-insert-hooks/out
Normal file
1
test/normal/repeat-insert/repeat-insert-hooks/out
Normal file
|
@ -0,0 +1 @@
|
|||
fFINSERTEDoofFINSERTEDoofoofoofoo
|
1
test/normal/repeat-insert/repeat-insert-mapped/cmd
Normal file
1
test/normal/repeat-insert/repeat-insert-mapped/cmd
Normal file
|
@ -0,0 +1 @@
|
|||
ixyz<esc>.
|
1
test/normal/repeat-insert/repeat-insert-mapped/out
Normal file
1
test/normal/repeat-insert/repeat-insert-mapped/out
Normal file
|
@ -0,0 +1 @@
|
|||
zzxx
|
1
test/normal/repeat-insert/repeat-insert-mapped/rc
Normal file
1
test/normal/repeat-insert/repeat-insert-mapped/rc
Normal file
|
@ -0,0 +1 @@
|
|||
map global insert y '<a-;>gh'
|
1
test/normal/repeat-insert/repeat-normal-exec/cmd
Normal file
1
test/normal/repeat-insert/repeat-normal-exec/cmd
Normal file
|
@ -0,0 +1 @@
|
|||
i<a-;>:execute-keys foo<ret><esc>.
|
1
test/normal/repeat-insert/repeat-normal-exec/out
Normal file
1
test/normal/repeat-insert/repeat-normal-exec/out
Normal file
|
@ -0,0 +1 @@
|
|||
foofoo
|
1
test/normal/repeat-insert/repeat-normal-movement/cmd
Normal file
1
test/normal/repeat-insert/repeat-normal-movement/cmd
Normal file
|
@ -0,0 +1 @@
|
|||
ifoo<a-;>ghbar<esc>.
|
1
test/normal/repeat-insert/repeat-normal-movement/out
Normal file
1
test/normal/repeat-insert/repeat-normal-movement/out
Normal file
|
@ -0,0 +1 @@
|
|||
barbarfoofoo
|
Loading…
Reference in New Issue
Block a user