From e6633854c4bb6685b1122787457263138e220dac Mon Sep 17 00:00:00 2001 From: doryan Date: Mon, 21 Oct 2024 22:01:10 +0400 Subject: [PATCH] feat(ufo): add config for nvim-ufo plugin --- lvim/lua/plugins/init.lua | 62 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/lvim/lua/plugins/init.lua b/lvim/lua/plugins/init.lua index e97c5a0..f206847 100644 --- a/lvim/lua/plugins/init.lua +++ b/lvim/lua/plugins/init.lua @@ -23,6 +23,66 @@ lvim.plugins = { }, { 'kevinhwang91/nvim-ufo', + opts = { + open_fold_hl_timeout = 400, + close_fold_kinds = { "imports", "comment" }, + preview = { + win_config = { + border = { "", "─", "", "", "", "─", "", "" }, + -- winhighlight = "Normal:Folded", + winblend = 0, + }, + mappings = { + scrollU = "", + scrollD = "", + jumpTop = "[", + jumpBot = "]", + }, + }, + }, + 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, }, { 'kevinhwang91/promise-async', @@ -90,7 +150,6 @@ lvim.plugins = { event = "InsertEnter", dependencies = { { - -- snippet plugin "L3MON4D3/LuaSnip", dependencies = "rafamadriz/friendly-snippets", opts = { history = true, updateevents = "TextChanged,TextChangedI" }, @@ -99,7 +158,6 @@ lvim.plugins = { require "configs.luasnip" end, }, - -- cmp sources plugins { "saadparwaiz1/cmp_luasnip", "hrsh7th/cmp-nvim-lua",