diff options
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/clever_f/feedback_service.lua | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua index 9c16cca..a5b0dd0 100644 --- a/lua/clever_f/feedback_service.lua +++ b/lua/clever_f/feedback_service.lua @@ -104,8 +104,10 @@ local function require_transitions(transitions, state) if type(transitions) ~= "table" or type(transitions.AddTemporaryOverlay) ~= "function" or type(transitions.RemoveTemporaryOverlay) ~= "function" + or type(transitions.AddTargetOverlay) ~= "function" + or type(transitions.ClearTargetOverlays) ~= "function" then - fail("FeedbackService transitions must manage temporary overlays", 3) + fail("FeedbackService transitions must manage overlay resources", 3) end return transitions end @@ -426,9 +428,42 @@ function FeedbackService:build_persistent(specification) } end +local function remove_target_overlays(record, window) + local resources = record.transitions:ClearTargetOverlays(window) + for _, resource in ipairs(resources) do + record.host:remove_highlight(resource.identity) + end + return resources +end + +function FeedbackService:remove_character_overlays(window) + if window == nil then + fail("character overlay window must identify its host window", 2) + end + return remove_target_overlays(service_records[self], window) +end + function FeedbackService:request_persistent(specification) local request = self:build_persistent(specification) - local requests = service_records[self].persistent_requests + if request.window == nil then + fail("persistent feedback window must identify its host window", 2) + end + local record = service_records[self] + remove_target_overlays(record, request.window) + request.identity = record.host:create_highlight({ + group = "CleverFChar", + window = request.window, + positions = request.positions, + priority = M.overlay_priority("CleverFChar"), + target_plan = request.target_plan, + descriptor = request.descriptor, + endpoint_policy = request.endpoint_policy, + match_start_line = request.match_start_line, + }) + request.group = "CleverFChar" + request.priority = M.overlay_priority("CleverFChar") + record.transitions:AddTargetOverlay(request.identity, request.window) + local requests = record.persistent_requests requests[#requests + 1] = request return request end |
