109 lines
2.8 KiB
Lua
109 lines
2.8 KiB
Lua
-- Implement delta as previewer for diffs
|
|
|
|
local previewers = require "telescope.previewers"
|
|
local builtin = require "telescope.builtin"
|
|
local pickers = require "telescope.pickers"
|
|
local finders = require "telescope.finders"
|
|
local actions = require "telescope.actions"
|
|
local action_state = require "telescope.actions.state"
|
|
local conf = require("telescope.config").values
|
|
|
|
local E = {}
|
|
|
|
local delta = previewers.new_termopen_previewer {
|
|
get_command = function(entry)
|
|
-- this is for status
|
|
-- You can get the AM things in entry.status. So we are displaying file if entry.status == '??' or 'A '
|
|
-- just do an if and return a different command
|
|
if entry.status == "??" or "A " then
|
|
return { "git", "-c", "core.pager=delta", "-c", "delta.side-by-side=false", "diff", entry.value }
|
|
end
|
|
|
|
-- note we can't use pipes
|
|
-- this command is for git_commits and git_bcommits
|
|
return { "git", "-c", "core.pager=delta", "-c", "delta.side-by-side=false", "diff", entry.value .. "^!" }
|
|
end,
|
|
}
|
|
|
|
E.my_git_commits = function(opts)
|
|
opts = opts or {}
|
|
opts.previewer = delta
|
|
|
|
builtin.git_commits(opts)
|
|
end
|
|
|
|
E.my_git_bcommits = function(opts)
|
|
opts = opts or {}
|
|
opts.previewer = delta
|
|
|
|
builtin.git_bcommits(opts)
|
|
end
|
|
|
|
E.my_git_status = function(opts)
|
|
opts = opts or {}
|
|
opts.previewer = delta
|
|
|
|
builtin.git_status(opts)
|
|
end
|
|
|
|
E.my_git_branches = function(opts)
|
|
opts = opts or {}
|
|
opts.previewer = delta
|
|
|
|
builtin.git_branches(opts)
|
|
end
|
|
|
|
E.project_files = function()
|
|
local opts = {} -- define here if you want to define something
|
|
vim.fn.system "git rev-parse --is-inside-work-tree"
|
|
if vim.v.shell_error == 0 then
|
|
require("telescope.builtin").git_files(opts)
|
|
else
|
|
require("telescope.builtin").find_files(opts)
|
|
end
|
|
end
|
|
|
|
local custom_commands = require "configs.telescope.commands"
|
|
|
|
E.cpickers = function(opts)
|
|
opts = opts or {}
|
|
pickers
|
|
.new(opts, {
|
|
prompt_title = "Commands",
|
|
|
|
finder = finders.new_table {
|
|
results = custom_commands,
|
|
entry_maker = function(entry)
|
|
return {
|
|
value = entry,
|
|
display = entry[1],
|
|
ordinal = entry[2],
|
|
}
|
|
end,
|
|
},
|
|
|
|
previewer = previewers.new_buffer_previewer {
|
|
title = "Custom commands preview",
|
|
define_preview = function(self, entry, _)
|
|
vim.api.nvim_buf_set_lines(self.state.bufnr, 0, -1, false, {
|
|
entry["ordinal"],
|
|
})
|
|
end,
|
|
},
|
|
|
|
attach_mappings = function(prompt_bufnr, _)
|
|
actions.select_default:replace(function()
|
|
actions.close(prompt_bufnr)
|
|
local selection = action_state.get_selected_entry()
|
|
vim.cmd(selection.ordinal)
|
|
end)
|
|
return true
|
|
end,
|
|
|
|
sorter = conf.generic_sorter(opts),
|
|
})
|
|
:find()
|
|
end
|
|
|
|
return E
|