diff options
Diffstat (limited to 'lua/clever_f/repeat_resolver.lua')
| -rw-r--r-- | lua/clever_f/repeat_resolver.lua | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua index 6b2b2f6..5f6a160 100644 --- a/lua/clever_f/repeat_resolver.lua +++ b/lua/clever_f/repeat_resolver.lua @@ -198,22 +198,26 @@ local function sampled_fixed_direction(resolver) return fixed end -function M.primary_direction(stored_descriptor, pressed_key, fix_key_direction) +function M.reverse_request(stored_descriptor, pressed_key, fix_key_direction) local stored = domain.Descriptor.from_string(stored_descriptor) local pressed = domain.Descriptor.from_string(pressed_key) if type(fix_key_direction) ~= "boolean" then fail("fix_key_direction must be a Boolean", 2) end - if not fix_key_direction then - if domain.Descriptor.is_lowercase(pressed) then - return stored - end - return domain.Descriptor.swap(stored) + + local reverse = domain.Descriptor.is_uppercase(pressed) + if fix_key_direction and domain.Descriptor.is_uppercase(stored) then + reverse = not reverse end - if domain.Descriptor.is_lowercase(pressed) then - return domain.Descriptor.lowercase(stored) + return reverse +end + +function M.primary_direction(stored_descriptor, pressed_key, fix_key_direction) + local stored = domain.Descriptor.from_string(stored_descriptor) + if M.reverse_request(stored, pressed_key, fix_key_direction) then + return domain.Descriptor.swap(stored) end - return domain.Descriptor.uppercase(stored) + return stored end M.resolve_primary_direction = M.primary_direction |
