feat(ui): show alpha marks in statuscolumn

This commit is contained in:
Folke Lemaitre
2023-10-04 12:48:37 +02:00
parent 35053290bf
commit bd2ac542a0

View File

@ -3,12 +3,26 @@ local M = {}
---@alias Sign {name:string, text:string, texthl:string} ---@alias Sign {name:string, text:string, texthl:string}
---@return Sign[] ---@return Sign[]
function M.get_signs(win) ---@param buf number
local buf = vim.api.nvim_win_get_buf(win) ---@param lnum number
function M.get_signs(buf, lnum)
---@diagnostic disable-next-line: no-unknown ---@diagnostic disable-next-line: no-unknown
return vim.tbl_map(function(sign) return vim.tbl_map(function(sign)
return vim.fn.sign_getdefined(sign.name)[1] return vim.fn.sign_getdefined(sign.name)[1]
end, vim.fn.sign_getplaced(buf, { group = "*", lnum = vim.v.lnum })[1].signs) end, vim.fn.sign_getplaced(buf, { group = "*", lnum = lnum })[1].signs)
end
---@return Sign?
---@param buf number
---@param lnum number
function M.get_mark(buf, lnum)
local marks = vim.fn.getmarklist(buf)
vim.list_extend(marks, vim.fn.getmarklist())
for _, mark in ipairs(marks) do
if mark.pos[2] == lnum and mark.mark:match("[a-zA-Z]") then
return { text = mark.mark:sub(2), texthl = "DiagnosticHint" }
end
end
end end
---@param sign? Sign ---@param sign? Sign
@ -45,10 +59,11 @@ function M.statuscolumn()
if vim.wo[win].signcolumn == "no" then if vim.wo[win].signcolumn == "no" then
return "" return ""
end end
local buf = vim.api.nvim_win_get_buf(win)
---@type Sign?,Sign?,Sign? ---@type Sign?,Sign?,Sign?
local left, right, fold local left, right, fold
for _, s in ipairs(M.get_signs(win)) do for _, s in ipairs(M.get_signs(buf, vim.v.lnum)) do
if s.name:find("GitSign") then if s.name:find("GitSign") then
right = s right = s
elseif not left then elseif not left then
@ -68,7 +83,7 @@ function M.statuscolumn()
end end
return table.concat({ return table.concat({
M.icon(left), M.icon(M.get_mark(buf, vim.v.lnum) or left),
[[%=]], [[%=]],
nu .. " ", nu .. " ",
M.icon(fold or right), M.icon(fold or right),