summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/clever_f/repeat_resolver.lua7
-rw-r--r--tests/run.lua17
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