diff options
Diffstat (limited to 'lua/clever_f/feedback_service.lua')
| -rw-r--r-- | lua/clever_f/feedback_service.lua | 29 |
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 |
