summaryrefslogtreecommitdiff
path: root/lua/99/extensions
diff options
context:
space:
mode:
author0xr3ngar <bogdan.nikolov4@outlook.com>2026-02-10 09:24:11 +0100
committer0xr3ngar <bogdan.nikolov4@outlook.com>2026-02-10 09:24:11 +0100
commit7fdf0076fc8a5f4bb30ab2cb5d2d39af4df43f64 (patch)
treee6be683bc730277ae0a88b787fe26051520fed56 /lua/99/extensions
parentbbdb2d0b4f8a021714ede1c3acabcdab9e70518a (diff)
downloada4-7fdf0076fc8a5f4bb30ab2cb5d2d39af4df43f64.tar.xz
a4-7fdf0076fc8a5f4bb30ab2cb5d2d39af4df43f64.zip
feat: telescope integration for set_provider
Diffstat (limited to 'lua/99/extensions')
-rw-r--r--lua/99/extensions/telescope.lua77
1 files changed, 68 insertions, 9 deletions
diff --git a/lua/99/extensions/telescope.lua b/lua/99/extensions/telescope.lua
index ac6bec1..769e03d 100644
--- a/lua/99/extensions/telescope.lua
+++ b/lua/99/extensions/telescope.lua
@@ -2,6 +2,18 @@ local _99 = require("99")
local M = {}
+--- @param list string[]
+--- @param value string
+--- @return number
+local function index_of(list, value)
+ for i, item in ipairs(list) do
+ if item == value then
+ return i
+ end
+ end
+ return 1
+end
+
--- @param provider _99.Providers.BaseProvider?
function M.select_model(provider)
provider = provider or _99.get_provider()
@@ -30,20 +42,12 @@ function M.select_model(provider)
local actions = require("telescope.actions")
local action_state = require("telescope.actions.state")
- -- position the telescope cursor at the currently selected model
local current = _99.get_model()
- local default_idx = 1
- for i, m in ipairs(models) do
- if m == current then
- default_idx = i
- break
- end
- end
pickers
.new({}, {
prompt_title = "99: Select Model (current: " .. current .. ")",
- default_selection_index = default_idx,
+ default_selection_index = index_of(models, current),
finder = finders.new_table({ results = models }),
sorter = conf.generic_sorter({}),
attach_mappings = function(prompt_bufnr)
@@ -63,4 +67,59 @@ function M.select_model(provider)
end)
end
+function M.select_provider()
+ local ok, pickers = pcall(require, "telescope.pickers")
+ if not ok then
+ vim.notify(
+ "99: telescope.nvim is required for this extension",
+ vim.log.levels.ERROR
+ )
+ return
+ end
+
+ local finders = require("telescope.finders")
+ local conf = require("telescope.config").values
+ local actions = require("telescope.actions")
+ local action_state = require("telescope.actions.state")
+
+ local providers = _99.Providers
+ local names = {}
+ local lookup = {}
+ for name, provider in pairs(providers) do
+ table.insert(names, name)
+ lookup[name] = provider
+ end
+ table.sort(names)
+
+ local current = _99.get_provider()._get_provider_name()
+
+ pickers
+ .new({}, {
+ prompt_title = "99: Select Provider (current: " .. current .. ")",
+ default_selection_index = index_of(names, current),
+ finder = finders.new_table({ results = names }),
+ sorter = conf.generic_sorter({}),
+ attach_mappings = function(prompt_bufnr)
+ actions.select_default:replace(function()
+ actions.close(prompt_bufnr)
+ local selection = action_state.get_selected_entry()
+ if not selection then
+ return
+ end
+ local chosen = lookup[selection[1]]
+ _99.set_provider(chosen)
+ vim.notify(
+ "99: Provider set to "
+ .. selection[1]
+ .. " (model: "
+ .. _99.get_model()
+ .. ")"
+ )
+ end)
+ return true
+ end,
+ })
+ :find()
+end
+
return M