diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 13:45:53 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 13:45:53 +0200 |
| commit | b59eafa9e512cc0334c6e363e0cb811065f1f7d7 (patch) | |
| tree | 3bfd00b0945d657a2ec982139223901e67f0980c /lua | |
| parent | ab2fca82cf676583efc9a5897de0dd7f07c053ef (diff) | |
Read same-direction repeat state
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/clever_f/sequence_coordinator.lua | 38 |
1 files changed, 38 insertions, 0 deletions
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 |
