diff options
Diffstat (limited to 'lua/clever_f')
| -rw-r--r-- | lua/clever_f/domain.lua | 30 | ||||
| -rw-r--r-- | lua/clever_f/repeat_resolver.lua | 6 |
2 files changed, 34 insertions, 2 deletions
diff --git a/lua/clever_f/domain.lua b/lua/clever_f/domain.lua index d7ba040..4d21d56 100644 --- a/lua/clever_f/domain.lua +++ b/lua/clever_f/domain.lua @@ -1173,11 +1173,18 @@ local ExplicitRepeatRequest = {} M.ExplicitRepeatRequest = ExplicitRepeatRequest register_type("ExplicitRepeatRequest", ExplicitRepeatRequest, function(data) + if data.neutral then + return "explicit-repeat:neutral" + end return "explicit-repeat:" .. data.descriptor.value end, function(left, right) - return left.descriptor == right.descriptor and left.target == right.target + return left.neutral == right.neutral + and left.descriptor == right.descriptor + and left.target == right.target end) +local neutral_explicit_repeat_request + function ExplicitRepeatRequest.new(descriptor, target) if ExplicitRepeatRequest.is(descriptor) and target == nil then return descriptor @@ -1192,15 +1199,34 @@ function ExplicitRepeatRequest.new(descriptor, target) }) end +function ExplicitRepeatRequest.neutral() + if neutral_explicit_repeat_request == nil then + neutral_explicit_repeat_request = new_record("ExplicitRepeatRequest", { + descriptor = nil, + effective_descriptor = nil, + target = nil, + neutral = true, + }) + end + return neutral_explicit_repeat_request +end + function ExplicitRepeatRequest.is(value) return is_record(value, "ExplicitRepeatRequest") end +function ExplicitRepeatRequest:is_neutral() + return self.neutral +end + function ExplicitRepeatRequest:to_table() + if self.neutral then + return { neutral = true } + end return { descriptor = self.descriptor.value, target = self.target:to_table(), - neutral = self.neutral, + neutral = false, } end diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua index 057c7e6..2af60bf 100644 --- a/lua/clever_f/repeat_resolver.lua +++ b/lua/clever_f/repeat_resolver.lua @@ -236,6 +236,9 @@ RepeatResolver.effective_primary_descriptor = RepeatResolver.resolve_primary_direction function M.build_same_direction_request(stored_descriptor, stored_target) + if stored_descriptor == nil then + return domain.ExplicitRepeatRequest.neutral() + end return domain.ExplicitRepeatRequest.new(stored_descriptor, stored_target) end @@ -254,6 +257,9 @@ RepeatResolver.resolve_explicit_same = RepeatResolver.same_direction_request RepeatResolver.explicit_same = RepeatResolver.same_direction_request function M.build_opposite_direction_request(stored_descriptor, stored_target) + if stored_descriptor == nil then + return domain.ExplicitRepeatRequest.neutral() + end return domain.ExplicitRepeatRequest.new( domain.Descriptor.swap(stored_descriptor), stored_target |
