feat(statuscol): statuscolumn options for open fold indicator and fold hl (#2923)

* feat(statuscol): fold open indicator

* fix: make it configurable

---------

Co-authored-by: Folke Lemaitre <folke.lemaitre@gmail.com>
This commit is contained in:
Phúc H. Lê Khắc
2024-06-05 13:23:19 +04:00
committed by GitHub
parent d64d761539
commit fa706b320b
2 changed files with 21 additions and 2 deletions

View File

@ -19,6 +19,12 @@ vim.g.root_spec = { "lsp", { ".git", "lua" }, "cwd" }
-- Set to false to disable.
vim.g.lazygit_config = true
-- Options for the LazyVim statuscolumn
vim.g.lazyvim_statuscolumn = {
folds_open = false, -- show fold sign when fold is open
folds_githl = false, -- highlight fold sign with git sign color
}
-- Optionally setup the terminal to use
-- This sets `vim.o.shell` and does some additional configuration for:
-- * pwsh

View File

@ -99,12 +99,18 @@ function M.statuscolumn()
local components = { "", "", "" } -- left, middle, right
local show_open_folds = vim.g.lazyvim_statuscolumn and vim.g.lazyvim_statuscolumn.folds_open
local use_githl = vim.g.lazyvim_statuscolumn and vim.g.lazyvim_statuscolumn.folds_githl
if show_signs then
---@type Sign?,Sign?,Sign?
local left, right, fold
local left, right, fold, githl
for _, s in ipairs(M.get_signs(buf, vim.v.lnum)) do
if s.name and (s.name:find("GitSign") or s.name:find("MiniDiffSign")) then
right = s
if use_githl then
githl = s["texthl"]
end
else
left = s
end
@ -112,9 +118,16 @@ function M.statuscolumn()
if vim.v.virtnum ~= 0 then
left = nil
end
vim.api.nvim_win_call(win, function()
if vim.fn.foldclosed(vim.v.lnum) >= 0 then
fold = { text = vim.opt.fillchars:get().foldclose or "", texthl = "Folded" }
fold = { text = vim.opt.fillchars:get().foldclose or "", texthl = githl or "Folded" }
elseif
show_open_folds
and not LazyVim.ui.skip_foldexpr[buf]
and vim.treesitter.foldexpr(vim.v.lnum):sub(1, 1) == ">"
then -- fold start
fold = { text = vim.opt.fillchars:get().foldopen or "", texthl = githl }
end
end)
-- Left: mark or non-git sign