summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/clever_f/sequence_coordinator.lua14
-rw-r--r--tests/run.lua21
2 files changed, 35 insertions, 0 deletions
diff --git a/lua/clever_f/sequence_coordinator.lua b/lua/clever_f/sequence_coordinator.lua
index f3ae7d7..7a23eab 100644
--- a/lua/clever_f/sequence_coordinator.lua
+++ b/lua/clever_f/sequence_coordinator.lua
@@ -511,6 +511,13 @@ function SequenceCoordinator:resolve_explicit_same()
return self:resolve_explicit("explicit_same", "same_direction_request")
end
+function SequenceCoordinator:resolve_explicit_opposite()
+ return self:resolve_explicit(
+ "explicit_opposite",
+ "opposite_direction_request"
+ )
+end
+
function SequenceCoordinator:primary(value)
local descriptor = self:validate_primary_descriptor(value)
local invocation = self:read_primary_invocation()
@@ -554,6 +561,13 @@ end
SequenceCoordinator.RepeatSameDirection =
SequenceCoordinator.repeat_same_direction
+function SequenceCoordinator:repeat_opposite_direction()
+ return self:resolve_explicit_opposite()
+end
+
+SequenceCoordinator.RepeatOppositeDirection =
+ SequenceCoordinator.repeat_opposite_direction
+
function M.new(options)
return SequenceCoordinator.new(options)
end
diff --git a/tests/run.lua b/tests/run.lua
index db19ffa..1afe2c8 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -7730,6 +7730,27 @@ test("Same-direction explicit coordination reads current-context state", functio
same(visual_target, resolution.request.target)
end)
+test("Opposite explicit coordination swaps current-context descriptor", function()
+ for _, stored in ipairs({ "f", "F", "t", "T" }) do
+ local _, transitions = fresh_sequence_state()
+ local stored_target = target("x")
+ transitions:BeginAcquisition("n", stored)
+ transitions:CommitAcquiredTarget("n", stored_target)
+ local host = MemoryHost.new({
+ configuration = { fix_key_direction = true },
+ count = 3,
+ })
+
+ local resolution = sequence_coordinator.new({ host = host })
+ :repeat_opposite_direction()
+
+ same("explicit_opposite", resolution.kind)
+ same(domain.Descriptor.swap(stored), resolution.request.descriptor)
+ same(stored_target, resolution.request.target)
+ same(3, resolution.invocation.count.value)
+ end
+end)
+
for _, item in ipairs(tests) do
local ok, failure = xpcall(item.body, debug.traceback)
if not ok then