Popup and Keymap Updates (#356)

feat: Enable always jumping to discussion tree (#352)
feat: Enables motions for easier range selection when creating comments/suggestions (e.g. s3j, c3j) (#353)
fix: Makes help popup not editable and close it on BufLeave (#355)

This is a #MINOR release
This commit is contained in:
Harrison (Harry) Cramer
2024-09-05 14:00:01 -04:00
committed by GitHub
parent 4ae623cd65
commit 6500ef1f2c
5 changed files with 67 additions and 22 deletions

View File

@@ -202,7 +202,12 @@ M.move_to_discussion_tree = function()
end
if #d == 0 then
u.notify("No diagnostics for this line", vim.log.levels.WARN)
if state.settings.reviewer_settings.jump_with_no_diagnostics then
vim.api.nvim_win_set_cursor(M.split.winid, { M.last_row, M.last_column })
vim.api.nvim_set_current_win(M.split.winid)
else
u.notify("No diagnostics for this line.", vim.log.levels.WARN)
end
return
elseif #d > 1 then
vim.ui.select(d, {
@@ -518,6 +523,13 @@ M.create_split_and_bufs = function()
local linked_bufnr = vim.api.nvim_create_buf(true, false)
local unlinked_bufnr = vim.api.nvim_create_buf(true, false)
vim.api.nvim_create_autocmd("WinLeave", {
buffer = linked_bufnr,
callback = function()
M.last_row, M.last_column = unpack(vim.api.nvim_win_get_cursor(0))
end,
})
return split, linked_bufnr, unlinked_bufnr
end

View File

@@ -1,6 +1,7 @@
local M = {}
local u = require("gitlab.utils")
local event = require("nui.utils.autocmd").event
local state = require("gitlab.state")
local List = require("gitlab.utils.list")
local Popup = require("nui.popup")
@@ -18,11 +19,15 @@ M.open = function()
local longest_line = u.get_longest_string(help_content_lines)
local help_popup =
Popup(u.create_popup_state("Help", state.settings.popup.help, longest_line + 3, #help_content_lines + 3, 60))
help_popup:on(event.BufLeave, function()
help_popup:unmount()
end)
help_popup:mount()
state.set_popup_keymaps(help_popup, "Help", nil)
local currentBuffer = vim.api.nvim_get_current_buf()
vim.api.nvim_buf_set_lines(currentBuffer, 0, #help_content_lines, false, help_content_lines)
u.switch_can_edit_buf(currentBuffer, false)
end
return M

View File

@@ -276,8 +276,9 @@ M.set_callback_for_reviewer_enter = function(callback)
})
end
---Create the line-wise visual selection in the range of the motion and execute the gitlab.nvim API
---function. After that, restore the cursor position and the original operatorfunc.
---Create the line-wise visual selection in the range of the motion (or on the [count] number of
---lines) and execute the gitlab.nvim API function. After that, restore the cursor position and the
---original operatorfunc.
---@param callback string Name of the gitlab.nvim API function to call
M.execute_callback = function(callback)
return function()
@@ -299,7 +300,9 @@ local function execute_operatorfunc(cb)
M.old_winnr = vim.api.nvim_get_current_win()
M.old_cursor_position = vim.api.nvim_win_get_cursor(M.old_winnr)
vim.opt.operatorfunc = ("v:lua.require'gitlab.reviewer'.execute_callback'%s'"):format(cb)
vim.api.nvim_feedkeys("g@", "n", false)
-- Use the operator count before motion to allow, e.g., 2cc == c2c
local count = M.operator_count > 0 and tostring(M.operator_count) or ""
vim.api.nvim_feedkeys("g@" .. count, "n", false)
end
---Set keymaps for creating comments, suggestions and for jumping to discussion tree.
@@ -308,16 +311,21 @@ end
local set_keymaps = function(bufnr, keymaps)
-- Set mappings for creating comments
if keymaps.reviewer.create_comment ~= false then
vim.keymap.set(
"o",
keymaps.reviewer.create_comment,
"$",
{ buffer = bufnr, desc = "Create comment for current line", nowait = keymaps.reviewer.create_comment_nowait }
)
-- Set keymap for repeated operator keybinding
vim.keymap.set("o", keymaps.reviewer.create_comment, function()
vim.api.nvim_cmd({ cmd = "normal", bang = true, args = { tostring(vim.v.count1) .. "j" } }, {})
end, {
buffer = bufnr,
desc = "Create comment for [count] lines",
nowait = keymaps.reviewer.create_comment_nowait,
})
-- Set operator keybinding
vim.keymap.set(
"n",
keymaps.reviewer.create_comment,
function()
M.operator_count = vim.v.count
execute_operatorfunc("create_multiline_comment")
end,
{ buffer = bufnr, desc = "Create comment for range of motion", nowait = keymaps.reviewer.create_comment_nowait }
@@ -333,18 +341,27 @@ local set_keymaps = function(bufnr, keymaps)
-- Set mappings for creating suggestions
if keymaps.reviewer.create_suggestion ~= false then
vim.keymap.set("o", keymaps.reviewer.create_suggestion, "$", {
-- Set keymap for repeated operator keybinding
vim.keymap.set("o", keymaps.reviewer.create_suggestion, function()
vim.api.nvim_cmd({ cmd = "normal", bang = true, args = { tostring(vim.v.count1) .. "j" } }, {})
end, {
buffer = bufnr,
desc = "Create suggestion for current line",
desc = "Create suggestion for [count] lines",
nowait = keymaps.reviewer.create_suggestion_nowait,
})
-- Set operator keybinding
vim.keymap.set("n", keymaps.reviewer.create_suggestion, function()
M.operator_count = vim.v.count
M.operator = keymaps.reviewer.create_suggestion
execute_operatorfunc("create_comment_suggestion")
end, {
buffer = bufnr,
desc = "Create suggestion for range of motion",
nowait = keymaps.reviewer.create_suggestion_nowait,
})
-- Set visual mode keybinding
vim.keymap.set("v", keymaps.reviewer.create_suggestion, function()
require("gitlab").create_comment_suggestion()
end, {

View File

@@ -52,6 +52,7 @@ M.settings = {
config_path = nil,
reviewer = "diffview",
reviewer_settings = {
jump_with_no_diagnostics = false,
diffview = {
imply_local = false,
},