diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:47:14 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:47:14 +0200 |
| commit | 71c815b9794f19df9451f59fac6dd0368d91e1f8 (patch) | |
| tree | 94313ecb6dd68f1d9264c4c87351773529fa6e03 /lua/clever_f/feedback_service.lua | |
| parent | 881a6714c6bfd4d28c5b0470ad54041e5399a06c (diff) | |
Return valid direct marker positions
Diffstat (limited to 'lua/clever_f/feedback_service.lua')
| -rw-r--r-- | lua/clever_f/feedback_service.lua | 55 |
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 |
