summaryrefslogtreecommitdiff
path: root/lua/clever_f/feedback_service.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/clever_f/feedback_service.lua')
-rw-r--r--lua/clever_f/feedback_service.lua35
1 files changed, 33 insertions, 2 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua
index e553cd7..9d7ef28 100644
--- a/lua/clever_f/feedback_service.lua
+++ b/lua/clever_f/feedback_service.lua
@@ -622,10 +622,41 @@ function M.command_migration_reason(request)
return nil
end
+local function has_target_overlay(record, window)
+ for _, resource in ipairs(record.state.target_overlays) do
+ if resource.window == window then
+ return true
+ end
+ end
+ return false
+end
+
function FeedbackService:migrate_command(request)
+ local reason = M.command_migration_reason(request)
+ local record = service_records[self]
+ local window = request.window or record.host:read_window()
+ if reason == nil or not has_target_overlay(record, window) then
+ return {
+ migrated = false,
+ reason = reason,
+ }
+ end
+
+ local plan = request.resolved_motion_plan or request.plan
+ if not domain.ResolvedMotionPlan.is(plan) then
+ fail("command feedback migration requires a ResolvedMotionPlan", 2)
+ end
+ local overlay = self:request_persistent({
+ context = request.context,
+ anchor = request.destination,
+ target_plan = plan.target_plan,
+ motion_plan = plan,
+ window = window,
+ })
return {
- migrated = false,
- reason = M.command_migration_reason(request),
+ migrated = true,
+ reason = reason,
+ overlay = overlay,
}
end