summaryrefslogtreecommitdiff
path: root/lua/clever_f
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 12:34:32 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 12:34:32 +0200
commit97dd567a7847e6efb7974a000353ecf4c44e1519 (patch)
tree02b31760abd828a0bfa1d641cc45a5d23b158589 /lua/clever_f
parent44682cf3244b773c33037967bd028608eb7be6dd (diff)
Create persistent character overlay
Diffstat (limited to 'lua/clever_f')
-rw-r--r--lua/clever_f/feedback_service.lua39
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