diff --git a/README.md b/README.md index 926ac94..22dd927 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,9 @@ require("gitlab").setup({ delete_comment = "dd", reply_to_comment = "r", toggle_node = "t", + position = "left", -- "top", "right", "bottom" or "left" + size = "20%", -- Size of split + relative = "editor" -- Position relative to "editor" or "window" }, dialogue = { -- The confirmation dialogue for deleting comments focus_next = { "j", "", "" }, diff --git a/lua/gitlab/discussions.lua b/lua/gitlab/discussions.lua index b3a8e43..f46681f 100644 --- a/lua/gitlab/discussions.lua +++ b/lua/gitlab/discussions.lua @@ -1,5 +1,6 @@ local u = require("gitlab.utils") local NuiTree = require("nui.tree") +local NuiSplit = require("nui.split") local job = require("gitlab.job") local state = require("gitlab.state") local Job = require("plenary.job") @@ -57,11 +58,12 @@ M.list_discussions = function() return end - vim.cmd.tabnew() - local buf = vim.api.nvim_create_buf(false, true) - vim.api.nvim_command("aboveleft vsplit") - vim.api.nvim_buf_set_option(buf, 'filetype', 'markdown') - vim.api.nvim_set_current_buf(buf) + local splitState = state.DISCUSSION_SPLIT + splitState.buf_options = { modifiable = false } + local split = NuiSplit(splitState) + split:mount() + + local buf = split.bufnr local allDiscussions = {} for i, discussion in ipairs(data.discussions) do local discussionChildren = {} @@ -90,7 +92,6 @@ M.list_discussions = function() state.tree:render() vim.api.nvim_buf_set_option(buf, 'filetype', 'markdown') u.darken_metadata(buf, '') - M.jump_to_file() end) end end, @@ -105,6 +106,14 @@ M.jump_to_file = function() local node = state.tree:get_node() if node == nil then return end + local wins = vim.api.nvim_list_wins() + local discussion_win = vim.api.nvim_get_current_win() + for _, winId in ipairs(wins) do + if winId ~= discussion_win then + vim.api.nvim_set_current_win(winId) + end + end + local childrenIds = node:get_child_ids() -- We have selected a note node if node.file_name ~= nil then diff --git a/lua/gitlab/init.lua b/lua/gitlab/init.lua index 019d231..08d2759 100644 --- a/lua/gitlab/init.lua +++ b/lua/gitlab/init.lua @@ -134,9 +134,14 @@ M.setPluginConfiguration = function(args) error("The .gitlab.nvim project file's 'project_id' must be number") end - -- Configuration for the plugin, such as port of server + -- Configuration for the plugin, such as port of server, layout, etc state.PORT = args.port or 21036 state.LOG_PATH = args.log_path or (vim.fn.stdpath("cache") .. "/gitlab.nvim.log") + state.DISCUSSION_SPLIT = { + relative = args.discussion_tree and args.discussion_tree.relative or "editor", + position = args.discussion_tree and args.discussion_tree.position or "left", + size = args.discussion_tree and args.discussion_tree.size or "20%", + } return true end