summaryrefslogtreecommitdiff
path: root/lua/clever_f/feedback_service.lua
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 12:36:12 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 12:36:12 +0200
commit0a670e606d7467d62dbd31fde199159c46c54ee9 (patch)
treeb7a179309059c965e8ff029f91cac46c6ad2a45e /lua/clever_f/feedback_service.lua
parent38b8acb54d10b788eae127a2b4756c37a7828e88 (diff)
Register buffer feedback finalizers
Diffstat (limited to 'lua/clever_f/feedback_service.lua')
-rw-r--r--lua/clever_f/feedback_service.lua29
1 files changed, 29 insertions, 0 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua
index 39ae527..492eda6 100644
--- a/lua/clever_f/feedback_service.lua
+++ b/lua/clever_f/feedback_service.lua
@@ -15,6 +15,11 @@ M.Priority = {
HIGH = "high",
ORDINARY = "ordinary",
}
+M.FINALIZER_EVENTS = {
+ "CursorMoved",
+ "InsertEnter",
+ "TextChanged",
+}
local OVERLAY_PRIORITIES = {
CleverFCursor = M.Priority.HIGH,
@@ -95,6 +100,8 @@ local function require_host(host)
or type(host.define_highlight_group) ~= "function"
or type(host.create_highlight) ~= "function"
or type(host.remove_highlight) ~= "function"
+ or type(host.read_buffer) ~= "function"
+ or type(host.register_events) ~= "function"
or type(host.supports_cursor_presentation) ~= "function"
or type(host.suppress_cursor_presentation) ~= "function"
or type(host.restore_cursor_presentation) ~= "function"
@@ -111,6 +118,7 @@ local function require_transitions(transitions, state)
or type(transitions.RemoveTemporaryOverlay) ~= "function"
or type(transitions.AddTargetOverlay) ~= "function"
or type(transitions.ClearTargetOverlays) ~= "function"
+ or type(transitions.AddFinalizer) ~= "function"
then
fail("FeedbackService transitions must manage overlay resources", 3)
end
@@ -447,6 +455,26 @@ function FeedbackService:remove_character_overlays(window)
return remove_target_overlays(service_records[self], window)
end
+function FeedbackService:handle_finalizer_event()
+ return false
+end
+
+local function register_finalizers(service, record)
+ local buffer = record.host:read_buffer()
+ local identity = record.host:register_events(
+ M.FINALIZER_EVENTS,
+ function(name, payload)
+ service:handle_finalizer_event(name, payload)
+ end,
+ { buffer = buffer }
+ )
+ record.transitions:AddFinalizer(identity, buffer)
+ return {
+ identity = identity,
+ buffer = buffer,
+ }
+end
+
function FeedbackService:request_persistent(specification)
local request = self:build_persistent(specification)
if request.window == nil then
@@ -471,6 +499,7 @@ function FeedbackService:request_persistent(specification)
request.window,
request.anchor.line
)
+ request.finalizers = register_finalizers(self, record)
local requests = record.persistent_requests
requests[#requests + 1] = request
return request