summaryrefslogtreecommitdiff
path: root/lua/clever_f/feedback_service.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/clever_f/feedback_service.lua')
-rw-r--r--lua/clever_f/feedback_service.lua55
1 files changed, 55 insertions, 0 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua
index e8c387d..b1a4233 100644
--- a/lua/clever_f/feedback_service.lua
+++ b/lua/clever_f/feedback_service.lua
@@ -201,6 +201,54 @@ function FeedbackService:create_cursor_presentation_lease(enabled)
return new_cursor_presentation_lease(record.host, supported == true)
end
+local function position_list(positions)
+ if type(positions) ~= "table" then
+ fail("direct marker positions must be a list", 3)
+ end
+ local result = {}
+ local item_count = 0
+ for key, position in pairs(positions) do
+ if type(key) ~= "number"
+ or key ~= math.floor(key)
+ or key < 1
+ or key > #positions
+ then
+ fail("direct marker positions must be a list", 3)
+ end
+ result[key] = domain.Position.coerce(position)
+ item_count = item_count + 1
+ end
+ if item_count ~= #positions then
+ fail("direct marker positions must be a list", 3)
+ end
+ return result
+end
+
+function FeedbackService:create_direct_markers(positions, window)
+ positions = position_list(positions)
+ if #positions == 0 then
+ return nil
+ end
+ if window == nil then
+ fail("direct marker window must identify its host window", 2)
+ end
+
+ local record = service_records[self]
+ local identity = record.host:create_highlight({
+ group = "CleverFDirect",
+ window = window,
+ positions = positions,
+ priority = M.overlay_priority("CleverFDirect"),
+ })
+ record.transitions:AddTemporaryOverlay(identity, window, "CleverFDirect")
+ return {
+ identity = identity,
+ window = window,
+ group = "CleverFDirect",
+ positions = positions,
+ }
+end
+
function FeedbackService:create_cursor_marker(position, window)
position = domain.Position.coerce(position)
if window == nil then
@@ -307,6 +355,13 @@ function FeedbackService:ensure_default_label()
}
end
+function FeedbackService:evaluate_highlights()
+ return {
+ default_label = self:ensure_default_label(),
+ feature_links = self:evaluate_feature_links(),
+ }
+end
+
function M.new(options)
return FeedbackService.new(options)
end