diff --git a/lua/config/plugins/nvimufo.lua b/lua/config/plugins/nvimufo.lua index 33725ca..5fc1ef0 100644 --- a/lua/config/plugins/nvimufo.lua +++ b/lua/config/plugins/nvimufo.lua @@ -7,22 +7,55 @@ vim.o.fillchars = [[eob: ,fold: ,foldopen:󰅀,foldsep:│,foldclose:󰅂]] vim.keymap.set('n', 'zR', require('ufo').openAllFolds) vim.keymap.set('n', 'zM', require('ufo').closeAllFolds) +local handler = function(virtText, lnum, endLnum, width, truncate) + local newVirtText = {} + 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 + for _, chunk in ipairs(virtText) do + local chunkText = chunk[1] + local chunkWidth = vim.fn.strdisplaywidth(chunkText) + if targetWidth > curWidth + chunkWidth then + table.insert(newVirtText, chunk) + else + chunkText = truncate(chunkText, targetWidth - curWidth) + local hlGroup = chunk[2] + 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) + end + break + end + curWidth = curWidth + chunkWidth + end + 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 + require('ufo').setup({ - open_fold_hl_timeout = 400, - close_fold_kinds = { "imports", "comment" }, - preview = { - win_config = { - border = { "", "─", "", "", "", "─", "", "" }, - winblend = 0, - }, - mappings = { - scrollU = "", - scrollD = "", - jumpTop = "[", - jumpBot = "]", - }, - }, - provider_selector = function(bufnr, filetype, buftype) - return {'treesitter', 'indent'} - end + fold_virt_text_handler = handler, + open_fold_hl_timeout = 400, + preview = { + win_config = { + border = { "", "─", "", "", "", "─", "", "" }, + winblend = 0, + }, + mappings = { + scrollU = "", + scrollD = "", + jumpTop = "[", + jumpBot = "]", + }, + }, + provider_selector = function(bufnr, filetype, buftype) + return { 'treesitter', 'indent' } + end }) diff --git a/lua/plugins/core/init.lua b/lua/plugins/core/init.lua index 177d58e..75b0713 100644 --- a/lua/plugins/core/init.lua +++ b/lua/plugins/core/init.lua @@ -139,49 +139,5 @@ return { }, { 'kevinhwang91/nvim-ufo', - lazy = true, - config = function(_, opts) - local handler = function(virtText, lnum, endLnum, width, truncate) - local newVirtText = {} - 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 - for _, chunk in ipairs(virtText) do - local chunkText = chunk[1] - local chunkWidth = vim.fn.strdisplaywidth(chunkText) - if targetWidth > curWidth + chunkWidth then - table.insert(newVirtText, chunk) - else - chunkText = truncate(chunkText, targetWidth - curWidth) - local hlGroup = chunk[2] - 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) - end - break - end - curWidth = curWidth + chunkWidth - end - 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 - require("ufo").setup(opts) - vim.keymap.set("n", "K", function() - local winid = require("ufo").peekFoldedLinesUnderCursor() - if not winid then - -- vim.lsp.buf.hover() - vim.cmd [[ Lspsaga hover_doc ]] - end - end) - end, }, }