summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/clever_f/repeat_resolver.lua13
-rw-r--r--tests/run.lua14
2 files changed, 24 insertions, 3 deletions
diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua
index 086282b..6bf5205 100644
--- a/lua/clever_f/repeat_resolver.lua
+++ b/lua/clever_f/repeat_resolver.lua
@@ -62,12 +62,15 @@ function RepeatResolver:previous_landing(context)
return resolver_records[self].state:get_previous_landing(context)
end
-function RepeatResolver:decide(context, current_position)
+function RepeatResolver:decide(context, current_position, macro_state)
current_position = domain.Position.coerce(current_position)
local landing = self:previous_landing(context)
if landing == nil or not domain.Position.equal(landing, current_position) then
return M.Decision.ACQUIRE
end
+ if domain.MacroState.new(macro_state).executing then
+ return M.Decision.ACQUIRE
+ end
return nil
end
@@ -82,8 +85,12 @@ M.landing = function(context, options)
return RepeatResolver.new(options):previous_landing(context)
end
-function M.decide(context, current_position, options)
- return RepeatResolver.new(options):decide(context, current_position)
+function M.decide(context, current_position, macro_state, options)
+ return RepeatResolver.new(options):decide(
+ context,
+ current_position,
+ macro_state
+ )
end
M.eligibility = M.decide
diff --git a/tests/run.lua b/tests/run.lua
index d5b97da..cccf8dd 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -3816,6 +3816,20 @@ test("Primary eligibility acquires for missing and different landings", function
same(nil, resolver:decide("n", domain.Position.new(2, 5)))
end)
+test("Primary eligibility acquires while a macro executes", function()
+ local _, transitions = fresh_sequence_state()
+ local landing = domain.Position.new(1, 6)
+ transitions:BeginAcquisition("n", "f")
+ transitions:CommitCommandSuccess("n", landing, true)
+ local resolver = repeat_resolver.new()
+
+ same(
+ repeat_resolver.Decision.ACQUIRE,
+ resolver:decide("n", landing, domain.MacroState.new("q"))
+ )
+ same(nil, resolver:decide("n", landing, domain.MacroState.new(nil)))
+end)
+
for _, item in ipairs(tests) do
local ok, failure = xpcall(item.body, debug.traceback)
if not ok then