From b59eafa9e512cc0334c6e363e0cb811065f1f7d7 Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 13:45:53 +0200 Subject: Read same-direction repeat state --- lua/clever_f/sequence_coordinator.lua | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'lua') diff --git a/lua/clever_f/sequence_coordinator.lua b/lua/clever_f/sequence_coordinator.lua index cb6bf80..c43d244 100644 --- a/lua/clever_f/sequence_coordinator.lua +++ b/lua/clever_f/sequence_coordinator.lua @@ -470,6 +470,37 @@ function SequenceCoordinator:last_primary_resolution() return coordinator_records[self].last_primary_resolution end +function SequenceCoordinator:read_explicit_invocation() + local host = coordinator_records[self].host + if type(host) ~= "table" + or type(host.read_mode) ~= "function" + or type(host.read_cursor) ~= "function" + or type(host.read_count) ~= "function" + then + fail("SequenceCoordinator host must provide explicit action state", 2) + end + local position = domain.Position.coerce(host:read_cursor()) + return { + context = domain.ModeContext.from_full_mode(host:read_mode()), + position = position, + origin = position, + count = domain.Count.new(host:read_count()), + } +end + +function SequenceCoordinator:resolve_explicit_same() + local invocation = self:read_explicit_invocation() + local resolver = coordinator_records[self].repeat_resolver + if type(resolver.same_direction_request) ~= "function" then + fail("RepeatResolver must build same-direction requests", 2) + end + return { + kind = "explicit_same", + invocation = invocation, + request = resolver:same_direction_request(invocation.context), + } +end + function SequenceCoordinator:primary(value) local descriptor = self:validate_primary_descriptor(value) local invocation = self:read_primary_invocation() @@ -506,6 +537,13 @@ function SequenceCoordinator:primary(value) ) end +function SequenceCoordinator:repeat_same_direction() + return self:resolve_explicit_same() +end + +SequenceCoordinator.RepeatSameDirection = + SequenceCoordinator.repeat_same_direction + function M.new(options) return SequenceCoordinator.new(options) end -- cgit v1.2.3