The statusline now takes a bufnr instead of using the current buffer, this way it works with multiple statuslines at the same time, like incline. Additionally, it doesnt dissapear when open floating windows.
79 lines
3.1 KiB
Lua
79 lines
3.1 KiB
Lua
return {
|
|
"b0o/incline.nvim",
|
|
dependencies = {
|
|
"lewis6991/gitsigns.nvim"
|
|
},
|
|
config = function()
|
|
require("gitsigns").setup({})
|
|
local devicons = require("nvim-web-devicons")
|
|
require("incline").setup({
|
|
window = {
|
|
padding = 0,
|
|
},
|
|
render = function(props)
|
|
local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(props.buf), ":t")
|
|
if filename == "" then
|
|
filename = "[No Name]"
|
|
end
|
|
local ft_icon, ft_color = devicons.get_icon_color(filename)
|
|
|
|
local function get_git_diff()
|
|
local icons = { removed = "", changed = "", added = "" }
|
|
local signs = vim.b[props.buf].gitsigns_status_dict
|
|
local labels = {}
|
|
if signs == nil then
|
|
return labels
|
|
end
|
|
for name, icon in pairs(icons) do
|
|
if tonumber(signs[name]) and signs[name] > 0 then
|
|
table.insert(labels, { icon .. signs[name] .. " ", group = "Diff" .. name })
|
|
end
|
|
end
|
|
if #labels > 0 then
|
|
table.insert(labels, { "┊ " })
|
|
end
|
|
return labels
|
|
end
|
|
|
|
local function get_diagnostic_label()
|
|
local icons = { error = "", warn = "", info = "", hint = "" }
|
|
local label = {}
|
|
|
|
for severity, icon in pairs(icons) do
|
|
local n = #vim.diagnostic.get(props.buf,
|
|
{ severity = vim.diagnostic.severity[string.upper(severity)] })
|
|
if n > 0 then
|
|
table.insert(label, { icon .. n .. " ", group = "DiagnosticSign" .. severity })
|
|
end
|
|
end
|
|
if #label > 0 then
|
|
table.insert(label, { "┊ " })
|
|
end
|
|
return label
|
|
end
|
|
|
|
local function get_arrow_label()
|
|
local statusline = require("arrow.statusline")
|
|
if statusline.is_on_arrow_file(props.buf) == nil then
|
|
return ""
|
|
end
|
|
|
|
return " " .. statusline.text_for_statusline_with_icons(props.buf)
|
|
end
|
|
|
|
return {
|
|
guibg = "#1e2030",
|
|
guifg = "#cad3f5",
|
|
{ " " },
|
|
{ get_diagnostic_label() },
|
|
{ get_git_diff() },
|
|
{ (ft_icon or "") .. " ", guifg = ft_color, guibg = "none" },
|
|
{ filename .. " ┊", gui = vim.bo[props.buf].modified and "bold,italic" or "bold" },
|
|
{ get_arrow_label() .. " " .. vim.api.nvim_win_get_number(props.win), group = "DevIconWindows" },
|
|
{ " " }
|
|
}
|
|
end,
|
|
})
|
|
end,
|
|
event = "VeryLazy",
|
|
}
|