From 9e420ee208b1ff52690ce8be554d800d749781f3 Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 11:14:30 +0200 Subject: Ignore encoded explicit targets --- lua/clever_f/repeat_resolver.lua | 21 +++++++++++++-------- tests/run.lua | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua index 32734cb..5363dea 100644 --- a/lua/clever_f/repeat_resolver.lua +++ b/lua/clever_f/repeat_resolver.lua @@ -242,14 +242,19 @@ function M.explicit_target(stored_target) return stored_target end -function M.build_same_direction_request(stored_descriptor, stored_target) - if stored_descriptor == nil then +local function build_explicit_request(descriptor, stored_target) + if descriptor == nil then return domain.ExplicitRepeatRequest.neutral() end - return domain.ExplicitRepeatRequest.new( - stored_descriptor, - M.explicit_target(stored_target) - ) + local target = M.explicit_target(stored_target) + if target.first_code == 0x80 then + return domain.ExplicitRepeatRequest.neutral() + end + return domain.ExplicitRepeatRequest.new(descriptor, target) +end + +function M.build_same_direction_request(stored_descriptor, stored_target) + return build_explicit_request(stored_descriptor, stored_target) end M.explicit_same_direction = M.build_same_direction_request @@ -270,9 +275,9 @@ function M.build_opposite_direction_request(stored_descriptor, stored_target) if stored_descriptor == nil then return domain.ExplicitRepeatRequest.neutral() end - return domain.ExplicitRepeatRequest.new( + return build_explicit_request( domain.Descriptor.swap(stored_descriptor), - M.explicit_target(stored_target) + stored_target ) end diff --git a/tests/run.lua b/tests/run.lua index 11062ac..202eb4a 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -4164,6 +4164,23 @@ test("Missing explicit targets use character code zero", function() same(domain.Descriptor.TILL_FORWARD, opposite_request.descriptor) end) +test("Encoded explicit targets return a neutral request", function() + local _, transitions = fresh_sequence_state() + local special_target = domain.TargetValue.special_key( + string.char(0x80, 0xfd, 0x01) + ) + transitions:BeginAcquisition("n", "f") + transitions:CommitAcquiredTarget("n", special_target) + local resolver = repeat_resolver.new() + + local same_request = resolver:same_direction_request("n") + local opposite_request = resolver:opposite_direction_request("n") + truthy(same_request.neutral) + truthy(opposite_request.neutral) + same(nil, same_request.target) + same(nil, opposite_request.descriptor) +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then -- cgit v1.2.3