Files
gitea.nvim/lua/gitea/telescope.lua

98 lines
3.3 KiB
Lua

----------------------------------------------------------------------------
-- 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", "<CR>", open_selected_issue)
map("n", "<CR>", 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", "<CR>", open_selected_pr)
map("n", "<CR>", open_selected_pr)
return true
end
}):find()
end)
end
return M