summaryrefslogtreecommitdiff
path: root/lua/clever_f
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 12:38:27 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 12:38:27 +0200
commit107d14db6ac0731215c3e34eebe1c06b4e8fdb6a (patch)
tree6d064c48f19dcffa2ef4bf99db64d7fbd78ba502 /lua/clever_f
parent0df9949734b3e39893c75839ba84c4b858acb274 (diff)
Finalize divergent cursor movement
Diffstat (limited to 'lua/clever_f')
-rw-r--r--lua/clever_f/feedback_service.lua13
1 files changed, 12 insertions, 1 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua
index bb78c17..6fb40df 100644
--- a/lua/clever_f/feedback_service.lua
+++ b/lua/clever_f/feedback_service.lua
@@ -107,6 +107,7 @@ local function require_host(host)
or type(host.remove_highlight) ~= "function"
or type(host.read_buffer) ~= "function"
or type(host.read_cursor) ~= "function"
+ or type(host.read_window) ~= "function"
or type(host.register_events) ~= "function"
or type(host.remove_event_registration) ~= "function"
or type(host.supports_cursor_presentation) ~= "function"
@@ -127,6 +128,7 @@ local function require_transitions(transitions, state)
or type(transitions.ClearTargetOverlays) ~= "function"
or type(transitions.AddFinalizer) ~= "function"
or type(transitions.RemoveFinalizer) ~= "function"
+ or type(transitions.FullFinalization) ~= "function"
then
fail("FeedbackService transitions must manage overlay resources", 3)
end
@@ -482,11 +484,20 @@ function FeedbackService:cursor_moved_decision()
}
end
-function FeedbackService:handle_finalizer_event(name)
+function FeedbackService:full_finalize(window)
+ local record = service_records[self]
+ window = window or record.host:read_window()
+ return record.transitions:FullFinalization(window)
+end
+
+function FeedbackService:handle_finalizer_event(name, payload)
if name == "CursorMoved" then
local decision = self:cursor_moved_decision()
if decision.equal then
decision.action = M.FinalizerAction.PRESERVE
+ else
+ decision.action = M.FinalizerAction.FINALIZE
+ decision.cleanup = self:full_finalize(payload and payload.window)
end
return decision
end