diff --git a/nvim/lua/user/plugins/editor.lua b/nvim/lua/user/plugins/editor.lua index 192e9af..8c797b5 100644 --- a/nvim/lua/user/plugins/editor.lua +++ b/nvim/lua/user/plugins/editor.lua @@ -33,15 +33,7 @@ return { end, }, -- Better folds - { - 'kevinhwang91/nvim-ufo', - dependencies = { - 'kevinhwang91/promise-async', - }, - opts = { - fold_virt_text_handler = require("user.utils.ufo").foldtext - } - }, + { import = "user.plugins.editor.ufo" }, -- Better status column { "luukvbaal/statuscol.nvim", diff --git a/nvim/lua/user/plugins/editor/ufo.lua b/nvim/lua/user/plugins/editor/ufo.lua new file mode 100644 index 0000000..23d9f27 --- /dev/null +++ b/nvim/lua/user/plugins/editor/ufo.lua @@ -0,0 +1,35 @@ +return { + 'kevinhwang91/nvim-ufo', + dependencies = { + 'kevinhwang91/promise-async', + }, + opts = { + fold_virt_text_handler = function(virtText, lnum, endLnum, width, truncate) + local newVirtText = {} + local suffix = (' --- %d '):format(endLnum - lnum) + 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 + table.insert(newVirtText, {suffix, 'MoreMsg'}) + return newVirtText + end + } +} diff --git a/nvim/lua/user/utils/ufo.lua b/nvim/lua/user/utils/ufo.lua deleted file mode 100644 index 688365c..0000000 --- a/nvim/lua/user/utils/ufo.lua +++ /dev/null @@ -1,31 +0,0 @@ -local M={} - -M.foldtext = function(virtText, lnum, endLnum, width, truncate) - local newVirtText = {} - local suffix = (' --- %d '):format(endLnum - lnum) - 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 - table.insert(newVirtText, {suffix, 'MoreMsg'}) - return newVirtText -end - -return M