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
|
// refill last_insert, this is very inefficient, but necessary at the moment
|
||||||
// to properly handle insert completion
|
// to properly handle insert completion
|
||||||
m_last_insert.keys.push_back(key);
|
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);
|
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 dec = on_scope_end([this]{ --m_handle_key_level;} );
|
||||||
|
|
||||||
auto process_key = [&](Key key, bool synthesized) {
|
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);
|
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();
|
const auto keymap_mode = current_mode().keymap_mode();
|
||||||
KeymapManager& keymaps = m_context.keymaps();
|
KeymapManager& keymaps = m_context.keymaps();
|
||||||
if (keymaps.is_mapped(key, keymap_mode) and not m_context.keymaps_disabled())
|
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