diff options
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/clever_f/feedback_service.lua | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua index 492eda6..0af482a 100644 --- a/lua/clever_f/feedback_service.lua +++ b/lua/clever_f/feedback_service.lua @@ -102,6 +102,7 @@ local function require_host(host) or type(host.remove_highlight) ~= "function" or type(host.read_buffer) ~= "function" or type(host.register_events) ~= "function" + or type(host.remove_event_registration) ~= "function" or type(host.supports_cursor_presentation) ~= "function" or type(host.suppress_cursor_presentation) ~= "function" or type(host.restore_cursor_presentation) ~= "function" @@ -119,6 +120,7 @@ local function require_transitions(transitions, state) or type(transitions.AddTargetOverlay) ~= "function" or type(transitions.ClearTargetOverlays) ~= "function" or type(transitions.AddFinalizer) ~= "function" + or type(transitions.RemoveFinalizer) ~= "function" then fail("FeedbackService transitions must manage overlay resources", 3) end @@ -151,6 +153,7 @@ function FeedbackService.new(options) options.state ), persistent_requests = {}, + owned_finalizer = nil, } return service end @@ -461,6 +464,15 @@ end local function register_finalizers(service, record) local buffer = record.host:read_buffer() + local owned = record.owned_finalizer + if owned ~= nil and owned.buffer == buffer then + return owned + end + if owned ~= nil then + record.host:remove_event_registration(owned.identity) + record.transitions:RemoveFinalizer(owned.identity, owned.buffer) + end + local identity = record.host:register_events( M.FINALIZER_EVENTS, function(name, payload) @@ -469,10 +481,12 @@ local function register_finalizers(service, record) { buffer = buffer } ) record.transitions:AddFinalizer(identity, buffer) - return { + owned = { identity = identity, buffer = buffer, } + record.owned_finalizer = owned + return owned end function FeedbackService:request_persistent(specification) |
