This is a breaking change to the way the plugin is configured. If users are using the old configuration the plugin will warn them which fields have been removed in their configuration. Old keybindings can be found here: https://github.com/harrisoncramer/gitlab.nvim/pull/340#issuecomment-2282756924 (#331) feat: Customize discussion tree chevrons (#339)
113 lines
3.3 KiB
Lua
113 lines
3.3 KiB
Lua
local state = require("gitlab.state")
|
|
local u = require("gitlab.utils")
|
|
local job = require("gitlab.job")
|
|
local M = {}
|
|
|
|
M.attach_file = function()
|
|
local attachment_dir = state.settings.attachment_dir
|
|
if not attachment_dir or attachment_dir == "" then
|
|
u.notify("Must provide valid attachment_dir in plugin setup", vim.log.levels.ERROR)
|
|
return
|
|
end
|
|
|
|
local files = u.list_files_in_folder(attachment_dir)
|
|
|
|
if files == nil then
|
|
u.notify(string.format("Could not list files in %s", attachment_dir), vim.log.levels.ERROR)
|
|
return
|
|
end
|
|
|
|
vim.ui.select(files, {
|
|
prompt = "Choose attachment",
|
|
}, function(choice)
|
|
if not choice then
|
|
return
|
|
end
|
|
local full_path = attachment_dir .. u.path_separator .. choice
|
|
local body = { file_path = full_path, file_name = choice }
|
|
job.run_job("/attachment", "POST", body, function(data)
|
|
local markdown = data.markdown
|
|
local current_line = u.get_current_line_number()
|
|
local bufnr = vim.api.nvim_get_current_buf()
|
|
vim.api.nvim_buf_set_lines(bufnr, current_line - 1, current_line, false, { markdown })
|
|
end)
|
|
end)
|
|
end
|
|
|
|
M.editable_popup_opts = {
|
|
action_before_close = true,
|
|
action_before_exit = false,
|
|
save_to_temp_register = true,
|
|
}
|
|
|
|
M.non_editable_popup_opts = {
|
|
action_before_close = true,
|
|
action_before_exit = false,
|
|
save_to_temp_register = false,
|
|
}
|
|
|
|
-- Get the index of the next popup when cycling forward
|
|
local function next_index(i, n, count)
|
|
count = count > 0 and count or 1
|
|
for _ = 1, count do
|
|
if i < n then
|
|
i = i + 1
|
|
elseif i == n then
|
|
i = 1
|
|
end
|
|
end
|
|
return i
|
|
end
|
|
|
|
---Get the index of the previous popup when cycling backward
|
|
---@param i integer The current index
|
|
---@param n integer The total number of popups
|
|
---@param count integer The count used with the keymap (replaced with 1 if no count was given)
|
|
local function prev_index(i, n, count)
|
|
count = count > 0 and count or 1
|
|
for _ = 1, count do
|
|
if i > 1 then
|
|
i = i - 1
|
|
elseif i == 1 then
|
|
i = n
|
|
end
|
|
end
|
|
return i
|
|
end
|
|
|
|
---Setup keymaps for cycling popups. The keymap accepts count.
|
|
---@param popups table Table of Popups
|
|
M.set_cycle_popups_keymaps = function(popups)
|
|
local keymaps = require("gitlab.state").settings.keymaps
|
|
if keymaps.disable_all or keymaps.popup.disable_all then
|
|
return
|
|
end
|
|
|
|
local number_of_popups = #popups
|
|
for i, popup in ipairs(popups) do
|
|
if keymaps.popup.next_field then
|
|
popup:map("n", keymaps.popup.next_field, function()
|
|
vim.api.nvim_set_current_win(popups[next_index(i, number_of_popups, vim.v.count)].winid)
|
|
end, { desc = "Go to next field (accepts count)", nowait = keymaps.popup.next_field_nowait })
|
|
end
|
|
if keymaps.popup.prev_field then
|
|
popup:map("n", keymaps.popup.prev_field, function()
|
|
vim.api.nvim_set_current_win(popups[prev_index(i, number_of_popups, vim.v.count)].winid)
|
|
end, { desc = "Go to previous field (accepts count)", nowait = keymaps.popup.prev_field_nowait })
|
|
end
|
|
end
|
|
end
|
|
|
|
---Toggle the value in a "Boolean buffer"
|
|
M.toggle_bool = function()
|
|
local bufnr = vim.api.nvim_get_current_buf()
|
|
local current_val = u.get_buffer_text(bufnr)
|
|
vim.schedule(function()
|
|
u.switch_can_edit_buf(bufnr, true)
|
|
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, { u.toggle_string_bool(current_val) })
|
|
u.switch_can_edit_buf(bufnr, false)
|
|
end)
|
|
end
|
|
|
|
return M
|