feat(ui): added multiple options for diff command

This commit is contained in:
Folke Lemaitre 2022-12-24 11:27:29 +01:00
parent 8ad05feef1
commit 7d02da2ff0
No known key found for this signature in database
GPG Key ID: 41F8B1FBACAE2040
6 changed files with 83 additions and 5 deletions

View File

@ -327,6 +327,14 @@ return {
task = "✔ ", task = "✔ ",
}, },
throttle = 20, -- how frequently should the ui process render events throttle = 20, -- how frequently should the ui process render events
diff = {
-- diff command <d> can be one of:
-- * browser: opens the github compare view. Note that this is always mapped to <K> as well,
-- so you can have a different command for diff <d>
-- * git: will run git diff and open a buffer with filetype git
-- * terminal_git: will open a pseudo terminal with git diff
-- * diffview.nvim: will open Diffview to show the diff
cmd = "git",
}, },
checker = { checker = {
-- automatically check for plugin updates -- automatically check for plugin updates

View File

@ -50,6 +50,14 @@ M.defaults = {
task = "", task = "",
}, },
throttle = 20, -- how frequently should the ui process render events throttle = 20, -- how frequently should the ui process render events
diff = {
-- diff command <d> can be one of:
-- * browser: opens the github compare view. Note that this is always mapped to <K> as well,
-- so you can have a different command for diff <d>
-- * git: will run git diff and open a buffer with filetype git
-- * terminal_git: will open a pseudo terminal with git diff
-- * diffview.nvim: will open Diffview to show the diff
cmd = "git",
}, },
checker = { checker = {
-- automatically check for plugin updates -- automatically check for plugin updates

View File

@ -109,7 +109,7 @@ function M.spawn(cmd, opts)
end end
---@param cmd string[] ---@param cmd string[]
---@param opts? {cwd:string} ---@param opts? {cwd:string, env:table}
function M.exec(cmd, opts) function M.exec(cmd, opts)
opts = opts or {} opts = opts or {}
---@type string[] ---@type string[]
@ -117,6 +117,7 @@ function M.exec(cmd, opts)
local job = vim.fn.jobstart(cmd, { local job = vim.fn.jobstart(cmd, {
cwd = opts.cwd, cwd = opts.cwd,
pty = false, pty = false,
env = opts.env,
stdout_buffered = true, stdout_buffered = true,
on_stdout = function(_, _lines) on_stdout = function(_, _lines)
lines = _lines lines = _lines

View File

@ -26,6 +26,7 @@ end
M.keys = { M.keys = {
hover = "K", hover = "K",
diff = "d",
close = "q", close = "q",
details = "<cr>", details = "<cr>",
profile_sort = "<C-s>", profile_sort = "<C-s>",

58
lua/lazy/view/diff.lua Normal file
View File

@ -0,0 +1,58 @@
local Util = require("lazy.util")
local M = {}
---@alias LazyDiff {commit:string} | {from:string, to:string}
---@alias LazyDiffFun fun(plugin:LazyPlugin, diff:LazyDiff)
M.handlers = {
---@type LazyDiffFun
browser = function(plugin, diff)
if plugin.url then
local url = plugin.url:gsub("%.git$", "")
if diff.commit then
Util.open(url .. "/commit/" .. diff.commit)
else
Util.open(url .. "/compare/" .. diff.from .. ".." .. diff.to)
end
else
Util.error("No url for " .. plugin.name)
end
end,
---@type LazyDiffFun
["diffview.nvim"] = function(plugin, diff)
if diff.commit then
vim.cmd.DiffviewOpen(("-C=%s"):format(plugin.dir) .. " " .. diff.commit)
else
vim.cmd.DiffviewOpen(("-C=%s"):format(plugin.dir) .. " " .. diff.from .. ".." .. diff.to)
end
end,
---@type LazyDiffFun
git = function(plugin, diff)
local cmd = { "git", "diff" }
if diff.commit then
cmd[#cmd + 1] = diff.commit
else
cmd[#cmd + 1] = diff.from
cmd[#cmd + 1] = diff.to
end
Util.open_cmd(cmd, { cwd = plugin.dir, filetype = "git" })
end,
---@type LazyDiffFun
terminal_git = function(plugin, diff)
local cmd = { "git", "diff" }
if diff.commit then
cmd[#cmd + 1] = diff.commit
else
cmd[#cmd + 1] = diff.from
cmd[#cmd + 1] = diff.to
end
Util.open_cmd(cmd, { cwd = plugin.dir, terminal = true, env = { PAGER = "cat" } })
end,
}
return M

View File

@ -25,7 +25,7 @@ function M.new(view)
local self = setmetatable({}, { __index = setmetatable(M, { __index = Text }) }) local self = setmetatable({}, { __index = setmetatable(M, { __index = Text }) })
self.view = view self.view = view
self.padding = 2 self.padding = 2
self.wrap = view.win_opts.width self.wrap = view.opts.win_opts.width
return self return self
end end
@ -56,8 +56,9 @@ function M:update()
end end
end end
local mode = self:title() self:title()
local mode = self.view.state.mode
if mode == "help" then if mode == "help" then
self:help() self:help()
elseif mode == "profile" then elseif mode == "profile" then
@ -139,7 +140,6 @@ function M:title()
end end
self:nl():nl() self:nl():nl()
end end
return self.view.state.mode
end end
function M:help() function M:help()
@ -395,12 +395,14 @@ function M:log(task)
if msg:find("^%S+!:") then if msg:find("^%S+!:") then
self:diagnostic({ message = "Breaking Changes", severity = vim.diagnostic.severity.WARN }) self:diagnostic({ message = "Breaking Changes", severity = vim.diagnostic.severity.WARN })
end end
self:append(ref .. " ", "LazyCommit", { indent = 6 }) self:append(ref:sub(1, 7) .. " ", "LazyCommit", { indent = 6 })
self:append(vim.trim(msg)):highlight({ self:append(vim.trim(msg)):highlight({
["#%d+"] = "Number", ["#%d+"] = "Number",
["^%S+:"] = "Title", ["^%S+:"] = "Title",
["^%S+(%(.*%)):"] = "Italic", ["^%S+(%(.*%)):"] = "Italic",
["`.-`"] = "@text.literal.markdown_inline", ["`.-`"] = "@text.literal.markdown_inline",
["%*.-%*"] = "Italic",
["%*%*.-%*%*"] = "Bold",
}) })
-- string.gsub -- string.gsub
self:append(" " .. time, "Comment") self:append(" " .. time, "Comment")