diff --git a/lua/diffview/config.lua b/lua/diffview/config.lua index 86922fe1..65cd98d2 100644 --- a/lua/diffview/config.lua +++ b/lua/diffview/config.lua @@ -245,6 +245,10 @@ M.defaults = { { "n", "q", actions.close, { desc = "Close help menu" } }, { "n", "", actions.close, { desc = "Close help menu" } }, }, + commit_log_panel = { + { "n", "q", actions.close, { desc = "Close commit log" } }, + { "n", "", actions.close, { desc = "Close commit log" } }, + }, }, } -- stylua: ignore end diff --git a/lua/diffview/scene/views/diff/diff_view.lua b/lua/diffview/scene/views/diff/diff_view.lua index 283fed9d..ae8971c6 100644 --- a/lua/diffview/scene/views/diff/diff_view.lua +++ b/lua/diffview/scene/views/diff/diff_view.lua @@ -82,7 +82,7 @@ end function DiffView:post_open() vim.cmd("redraw") - self.commit_log_panel = CommitLogPanel(self.adapter, { + self.commit_log_panel = CommitLogPanel(self, self.adapter, { name = fmt("diffview://%s/log/%d/%s", self.adapter.ctx.dir, self.tabpage, "commit_log"), }) diff --git a/lua/diffview/scene/views/file_history/file_history_view.lua b/lua/diffview/scene/views/file_history/file_history_view.lua index baa86ece..9c4c07d3 100644 --- a/lua/diffview/scene/views/file_history/file_history_view.lua +++ b/lua/diffview/scene/views/file_history/file_history_view.lua @@ -40,7 +40,7 @@ function FileHistoryView:init(opt) end function FileHistoryView:post_open() - self.commit_log_panel = CommitLogPanel(self.adapter, { + self.commit_log_panel = CommitLogPanel(self, self.adapter, { name = ("diffview://%s/log/%d/%s"):format(self.adapter.ctx.dir, self.tabpage, "commit_log"), }) diff --git a/lua/diffview/ui/panels/commit_log_panel.lua b/lua/diffview/ui/panels/commit_log_panel.lua index 1160a261..12c6068e 100644 --- a/lua/diffview/ui/panels/commit_log_panel.lua +++ b/lua/diffview/ui/panels/commit_log_panel.lua @@ -51,7 +51,7 @@ end ---@param adapter VCSAdapter ---@param opt CommitLogPanelSpec -function CommitLogPanel:init(adapter, opt) +function CommitLogPanel:init(parent, adapter, opt) self:super({ bufname = opt.name, config = opt.config or get_user_config().commit_log_panel.win_config, @@ -65,6 +65,21 @@ function CommitLogPanel:init(adapter, opt) vim.bo[self.bufid].bufhidden = "wipe" end, }) + + local conf = get_user_config().keymaps + local default_opt = { silent = true, nowait = true, buffer = self.bufid } + + for _, mapping in ipairs(conf.commit_log_panel) do + local map_opt = vim.tbl_extend("force", default_opt, mapping[4] or {}, { buffer = self.bufid }) + vim.keymap.set(mapping[1], mapping[2], mapping[3], map_opt) + end + + parent.emitter:on("close", function(e) + if self:is_focused() then + self:close() + e:stop_propagation() + end + end) end ---@param self CommitLogPanel