mirror of
https://github.com/harivansh-afk/nix.git
synced 2026-04-17 14:01:24 +00:00
canola git custom
This commit is contained in:
parent
ada2fbbbf6
commit
cbd1d727fc
1 changed files with 58 additions and 2 deletions
|
|
@ -5,8 +5,8 @@ return {
|
||||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
||||||
init = function()
|
init = function()
|
||||||
vim.g.canola = {
|
vim.g.canola = {
|
||||||
columns = { 'icon', 'git_status' },
|
columns = { 'icon' },
|
||||||
delete = { wipe = false, recursive = true},
|
delete = { wipe = false, recursive = true },
|
||||||
hidden = { enabled = false },
|
hidden = { enabled = false },
|
||||||
keymaps = {
|
keymaps = {
|
||||||
['g?'] = { callback = 'actions.show_help', mode = 'n' },
|
['g?'] = { callback = 'actions.show_help', mode = 'n' },
|
||||||
|
|
@ -21,6 +21,62 @@ return {
|
||||||
}
|
}
|
||||||
map('n', '-', '<cmd>Canola<cr>')
|
map('n', '-', '<cmd>Canola<cr>')
|
||||||
map('n', '<leader>e', '<cmd>Canola<cr>')
|
map('n', '<leader>e', '<cmd>Canola<cr>')
|
||||||
|
|
||||||
|
local ns = vim.api.nvim_create_namespace('canola_git_trailing')
|
||||||
|
local symbols = {
|
||||||
|
M = { '~', 'DiagnosticWarn' },
|
||||||
|
A = { '+', 'DiagnosticOk' },
|
||||||
|
D = { '-', 'DiagnosticError' },
|
||||||
|
R = { '→', 'DiagnosticWarn' },
|
||||||
|
['?'] = { '?', 'DiagnosticInfo' },
|
||||||
|
['!'] = { '!', 'Comment' },
|
||||||
|
}
|
||||||
|
|
||||||
|
local function apply_git_status(buf)
|
||||||
|
if not vim.api.nvim_buf_is_valid(buf) then return end
|
||||||
|
vim.api.nvim_buf_clear_namespace(buf, ns, 0, -1)
|
||||||
|
|
||||||
|
local ok, canola = pcall(require, 'canola')
|
||||||
|
if not ok then return end
|
||||||
|
|
||||||
|
local dir = canola.get_current_dir(buf)
|
||||||
|
if not dir then return end
|
||||||
|
|
||||||
|
local git_ok, git = pcall(require, 'canola-git')
|
||||||
|
if not git_ok then return end
|
||||||
|
|
||||||
|
local dir_cache = git._cache[dir]
|
||||||
|
if not dir_cache or not dir_cache.status then return end
|
||||||
|
|
||||||
|
local lines = vim.api.nvim_buf_line_count(buf)
|
||||||
|
for lnum = 0, lines - 1 do
|
||||||
|
local entry = canola.get_entry_on_line(buf, lnum + 1)
|
||||||
|
if entry then
|
||||||
|
local status = dir_cache.status[entry.name]
|
||||||
|
if status then
|
||||||
|
local ch = status:sub(1, 1)
|
||||||
|
if ch == ' ' then ch = status:sub(2, 2) end
|
||||||
|
local sym = symbols[ch]
|
||||||
|
if sym then
|
||||||
|
vim.api.nvim_buf_set_extmark(buf, ns, lnum, 0, {
|
||||||
|
virt_text = { { ' ' .. sym[1], sym[2] } },
|
||||||
|
virt_text_pos = 'eol',
|
||||||
|
invalidate = true,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd('User', {
|
||||||
|
pattern = 'CanolaReadPost',
|
||||||
|
callback = function(args)
|
||||||
|
local buf = args.buf
|
||||||
|
apply_git_status(buf)
|
||||||
|
vim.defer_fn(function() apply_git_status(buf) end, 500)
|
||||||
|
end,
|
||||||
|
})
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue