---------------------------------------------------------------------------- -- lua/gitea/telescope.lua -- -- Minimal telescope integration for listing issues (and now PRs) ---------------------------------------------------------------------------- local M = {} local pickers = require("telescope.pickers") local finders = require("telescope.finders") local conf = require("telescope.config").values local actions = require("telescope.actions") local action_state = require("telescope.actions.state") local issues_mod = require("gitea.issues") ---------------------------------------------------------------------------- -- Open selected issue ---------------------------------------------------------------------------- local function open_selected_issue(prompt_bufnr) local selection = action_state.get_selected_entry() actions.close(prompt_bufnr) if not selection then return end local issue_obj = selection.value local number = issue_obj.number issues_mod.open_issue(nil, nil, number) end ---------------------------------------------------------------------------- -- list_issues_in_telescope ---------------------------------------------------------------------------- function M.list_issues_in_telescope() issues_mod.list_issues(nil, nil, function(data) pickers.new({}, { prompt_title = "Gitea Issues", finder = finders.new_table { results = data, entry_maker = function(issue) return { value = issue, display = ("#%d: %s"):format(issue.number, issue.title or ""), ordinal = ("%d %s"):format(issue.number, (issue.title or "")) } end }, sorter = conf.generic_sorter({}), attach_mappings = function(prompt_bufnr, map) map("i", "", open_selected_issue) map("n", "", open_selected_issue) return true end }):find() end) end ---------------------------------------------------------------------------- -- Open selected PR ---------------------------------------------------------------------------- local function open_selected_pr(prompt_bufnr) local selection = action_state.get_selected_entry() actions.close(prompt_bufnr) if not selection then return end local pr_obj = selection.value local number = pr_obj.number local pulls_mod = require("gitea.pulls") pulls_mod.open_pull_in_buffer(nil, nil, number) end ---------------------------------------------------------------------------- -- list_pulls_in_telescope ---------------------------------------------------------------------------- function M.list_pulls_in_telescope() local pulls_mod = require("gitea.pulls") pulls_mod.list_pulls(nil, nil, function(data) pickers.new({}, { prompt_title = "Gitea Pull Requests", finder = finders.new_table { results = data, entry_maker = function(pr) return { value = pr, display = ("#%d: %s"):format(pr.number, pr.title or ""), ordinal = ("%d %s"):format(pr.number, (pr.title or "")) } end }, sorter = conf.generic_sorter({}), attach_mappings = function(prompt_bufnr, map) map("i", "", open_selected_pr) map("n", "", open_selected_pr) return true end }):find() end) end return M