From b129a100c3f3dd4f33daa2cafd7b3575b5472f89 Mon Sep 17 00:00:00 2001 From: Iordanis Petkakis <12776461+dpetka2001@users.noreply.github.com> Date: Sun, 30 Jun 2024 21:02:53 +0300 Subject: [PATCH] feat(cmp): attempt for dynamic width and trimming between fields --- lua/lazyvim/plugins/coding.lua | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/lua/lazyvim/plugins/coding.lua b/lua/lazyvim/plugins/coding.lua index 4e79d6dd..47c0fb4d 100644 --- a/lua/lazyvim/plugins/coding.lua +++ b/lua/lazyvim/plugins/coding.lua @@ -54,9 +54,33 @@ return { if icons[item.kind] then item.kind = icons[item.kind] .. item.kind end - if entry.context.filetype == "rust" then - item.menu = nil + + -- Set 'fixed_width' to false if not provided. + local fixed_width = vim.g.cmp_fixed_width or false + + -- Set the fixed completion window width. + if fixed_width then + vim.o.pumwidth = fixed_width end + + -- Get the width of the current window. + local win_width = vim.api.nvim_win_get_width(0) + + -- Set the max content width based on either: 'fixed_width' + -- or a percentage of the window width, in this case 20%. + -- We subtract 10 from 'fixed_width' to leave room for 'kind' fields. + local max_content_width = fixed_width and fixed_width - 10 or math.floor(win_width * 0.25) + + -- Truncate the completion entry text if it's longer than the + -- max content width. We subtract 3 from the max content width + -- to account for the "..." that will be appended to it. + if #item.abbr > (max_content_width / 2) then + item.abbr = vim.fn.strcharpart(item.abbr, 0, math.floor(max_content_width * 0.7) - 3) .. "..." + end + if item.menu and #item.menu > (max_content_width / 2) then + item.menu = vim.fn.strcharpart(item.menu, 0, math.floor(max_content_width * 0.7) - 3) .. "..." + end + return item end, },