diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:10:06 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:10:06 +0200 |
| commit | a78d8c8a5f22f88cdff140f32c884c9cd27b50e8 (patch) | |
| tree | fd707951beecb6689071bd5131ba6dc30f23c8f7 | |
| parent | 39bd7cca604d1d9d3b07a1861706e637441be7a8 (diff) | |
Resolve relative uppercase direction
| -rw-r--r-- | lua/clever_f/repeat_resolver.lua | 7 | ||||
| -rw-r--r-- | tests/run.lua | 17 |
2 files changed, 22 insertions, 2 deletions
diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua index fbb50c6..64c8b56 100644 --- a/lua/clever_f/repeat_resolver.lua +++ b/lua/clever_f/repeat_resolver.lua @@ -204,8 +204,11 @@ function M.primary_direction(stored_descriptor, pressed_key, fix_key_direction) if type(fix_key_direction) ~= "boolean" then fail("fix_key_direction must be a Boolean", 2) end - if not fix_key_direction and domain.Descriptor.is_lowercase(pressed) then - return stored + if not fix_key_direction then + if domain.Descriptor.is_lowercase(pressed) then + return stored + end + return domain.Descriptor.swap(stored) end return nil end diff --git a/tests/run.lua b/tests/run.lua index 19568fa..d88de73 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -4007,6 +4007,23 @@ test("Relative lower-case keys use the stored descriptor", function() end end) +test("Relative upper-case keys swap the stored descriptor", function() + fresh_sequence_state() + local host = MemoryHost.new({ + configuration = { fix_key_direction = false }, + }) + local resolver = repeat_resolver.new({ policy = policy.new(host) }) + + for _, stored in ipairs({ "f", "F", "t", "T" }) do + for _, pressed in ipairs({ "F", "T" }) do + local expected = domain.Descriptor.swap(stored) + local actual = resolver:resolve_primary_direction(stored, pressed) + same(expected, actual, stored .. "/" .. pressed) + same(domain.Descriptor.from_string(stored).family, actual.family) + end + end +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then |
