diff --git a/dot_config/nvim/exact_lua/exact_plugins/exact_editor/fold.lua b/dot_config/nvim/exact_lua/exact_plugins/exact_editor/fold.lua index 22ff129..c7eb048 100644 --- a/dot_config/nvim/exact_lua/exact_plugins/exact_editor/fold.lua +++ b/dot_config/nvim/exact_lua/exact_plugins/exact_editor/fold.lua @@ -48,7 +48,9 @@ return { config = function(_, opts) local handler = function(virtText, lnum, endLnum, width, truncate) local newVirtText = {} - local suffix = (' 󰁂 %d '):format(endLnum - lnum) + local totalLines = vim.api.nvim_buf_line_count(0) + local foldedLines = endLnum - lnum + local suffix = ("  %d %d%%"):format(foldedLines, foldedLines / totalLines * 100) local sufWidth = vim.fn.strdisplaywidth(suffix) local targetWidth = width - sufWidth local curWidth = 0 @@ -60,17 +62,18 @@ return { else chunkText = truncate(chunkText, targetWidth - curWidth) local hlGroup = chunk[2] - table.insert(newVirtText, {chunkText, hlGroup}) + table.insert(newVirtText, { chunkText, hlGroup }) chunkWidth = vim.fn.strdisplaywidth(chunkText) - -- str width returned from truncate() may less than 2nd argument, need padding if curWidth + chunkWidth < targetWidth then - suffix = suffix .. (' '):rep(targetWidth - curWidth - chunkWidth) + suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth) end break end curWidth = curWidth + chunkWidth end - table.insert(newVirtText, {suffix, 'MoreMsg'}) + local rAlignAppndx = math.max(math.min(vim.opt.textwidth["_value"], width - 1) - curWidth - sufWidth, 0) + suffix = (" "):rep(rAlignAppndx) .. suffix + table.insert(newVirtText, { suffix, "MoreMsg" }) return newVirtText end opts["fold_virt_text_handler"] = handler