mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
plugins/nvim-ufo: migrate to mkNeovimPlugin
This commit is contained in:
parent
fc584a3a41
commit
182ffa4583
2 changed files with 165 additions and 98 deletions
|
@ -1,87 +1,133 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (lib.nixvim) defaultNullOpts;
|
inherit (lib.nixvim) defaultNullOpts;
|
||||||
|
|
||||||
cfg = config.plugins.nvim-ufo;
|
|
||||||
in
|
in
|
||||||
{
|
lib.nixvim.neovim-plugin.mkNeovimPlugin {
|
||||||
options.plugins.nvim-ufo = lib.nixvim.neovim-plugin.extraOptionsOptions // {
|
name = "nvim-ufo";
|
||||||
enable = lib.mkEnableOption "nvim-ufo";
|
luaName = "ufo";
|
||||||
|
package = "nvim-ufo";
|
||||||
|
|
||||||
package = lib.mkPackageOption pkgs "nvim-ufo" {
|
maintainers = [ lib.maintainers.khaneliman ];
|
||||||
default = [
|
|
||||||
"vimPlugins"
|
|
||||||
"nvim-ufo"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
openFoldHlTimeout = defaultNullOpts.mkInt 400 ''
|
# TODO: added 2024-10-05 remove after 24.11
|
||||||
|
deprecateExtraOptions = true;
|
||||||
|
optionsRenamedToSettings = [
|
||||||
|
"openFoldHlTimeout"
|
||||||
|
"providerSelector"
|
||||||
|
"closeFoldKinds"
|
||||||
|
"foldVirtTextHandler"
|
||||||
|
"enableGetFoldVirtText"
|
||||||
|
[
|
||||||
|
"preview"
|
||||||
|
"winConfig"
|
||||||
|
"border"
|
||||||
|
]
|
||||||
|
[
|
||||||
|
"preview"
|
||||||
|
"winConfig"
|
||||||
|
"winblend"
|
||||||
|
]
|
||||||
|
[
|
||||||
|
"preview"
|
||||||
|
"winConfig"
|
||||||
|
"winhighlight"
|
||||||
|
]
|
||||||
|
[
|
||||||
|
"preview"
|
||||||
|
"winConfig"
|
||||||
|
"maxheight"
|
||||||
|
]
|
||||||
|
[
|
||||||
|
"preview"
|
||||||
|
"mappings"
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
settingsOptions = {
|
||||||
|
open_fold_hl_timeout = defaultNullOpts.mkUnsignedInt 400 ''
|
||||||
Time in millisecond between the range to be highlgihted and to be cleared
|
Time in millisecond between the range to be highlgihted and to be cleared
|
||||||
while opening the folded line, `0` value will disable the highlight
|
while opening the folded line, `0` value will disable the highlight.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
providerSelector = defaultNullOpts.mkLuaFn null ''
|
provider_selector = defaultNullOpts.mkLuaFn null ''
|
||||||
A lua function as a selector for fold providers.
|
A lua function as a selector for fold providers.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
closeFoldKinds = lib.nixvim.mkNullOrOption lib.types.attrs ''
|
close_fold_kinds_for_ft = defaultNullOpts.mkAttrsOf lib.types.anything { default = { }; } ''
|
||||||
After the buffer is displayed (opened for the first time), close the
|
After the buffer is displayed (opened for the first time), close the
|
||||||
folds whose range with `kind` field is included in this option. For now,
|
folds whose range with `kind` field is included in this option. For now,
|
||||||
'lsp' provider's standardized kinds are 'comment', 'imports' and 'region',
|
'lsp' provider's standardized kinds are 'comment', 'imports' and 'region',
|
||||||
run `UfoInspect` for details if your provider has extended the kinds.
|
run `UfoInspect` for details if your provider has extended the kinds.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
foldVirtTextHandler = defaultNullOpts.mkLuaFn null "A lua function to customize fold virtual text";
|
fold_virt_text_handler = defaultNullOpts.mkLuaFn null "A lua function to customize fold virtual text.";
|
||||||
|
|
||||||
enableGetFoldVirtText = defaultNullOpts.mkBool false ''
|
enable_get_fold_virt_text = defaultNullOpts.mkBool false ''
|
||||||
Enable a function with `lnum` as a parameter to capture the virtual text
|
Enable a function with `lnum` as a parameter to capture the virtual text
|
||||||
for the folded lines and export the function to `get_fold_virt_text` field of
|
for the folded lines and export the function to `get_fold_virt_text` field of
|
||||||
ctx table as 6th parameter in `fold_virt_text_handler`
|
ctx table as 6th parameter in `fold_virt_text_handler`
|
||||||
'';
|
'';
|
||||||
|
|
||||||
preview = {
|
preview = {
|
||||||
winConfig = {
|
win_config = {
|
||||||
border = defaultNullOpts.mkBorder "rounded" "preview window" "";
|
border = defaultNullOpts.mkBorder "rounded" "preview window" "";
|
||||||
|
|
||||||
winblend = defaultNullOpts.mkInt 12 "The winblend for preview window, `:h winblend`";
|
winblend = defaultNullOpts.mkUnsignedInt 12 "The winblend for preview window, `:h winblend`.";
|
||||||
|
|
||||||
winhighlight = defaultNullOpts.mkStr "Normal:Normal" "The winhighlight for preview window, `:h winhighlight`";
|
winhighlight = defaultNullOpts.mkStr "Normal:Normal" "The winhighlight for preview window, `:h winhighlight`.";
|
||||||
|
|
||||||
maxheight = defaultNullOpts.mkInt 20 "The max height of preview window";
|
maxheight = defaultNullOpts.mkUnsignedInt 20 "The max height of preview window.";
|
||||||
};
|
};
|
||||||
|
|
||||||
mappings = lib.nixvim.mkNullOrOption lib.types.attrs "Mappings for preview window";
|
mappings = lib.nixvim.mkNullOrOption lib.types.attrs "Mappings for preview window.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config =
|
settingsExample = {
|
||||||
let
|
provider_selector = # Lua
|
||||||
options =
|
''
|
||||||
with cfg;
|
function(bufnr, filetype, buftype)
|
||||||
{
|
local ftMap = {
|
||||||
open_fold_hl_timeout = openFoldHlTimeout;
|
vim = "indent",
|
||||||
provider_selector = providerSelector;
|
python = {"indent"},
|
||||||
close_fold_kinds = closeFoldKinds;
|
git = ""
|
||||||
fold_virt_text_handler = foldVirtTextHandler;
|
}
|
||||||
enable_get_fold_virt_text = enableGetFoldVirtText;
|
|
||||||
|
|
||||||
preview = with preview; {
|
return ftMap[filetype]
|
||||||
inherit mappings;
|
end
|
||||||
win_config = winConfig;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
// cfg.extraOptions;
|
|
||||||
in
|
|
||||||
lib.mkIf cfg.enable {
|
|
||||||
extraPlugins = [ cfg.package ];
|
|
||||||
|
|
||||||
extraConfigLua = ''
|
|
||||||
require("ufo").setup(${lib.nixvim.toLuaObject options})
|
|
||||||
'';
|
'';
|
||||||
};
|
fold_virt_text_handler = # Lua
|
||||||
|
''
|
||||||
|
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
|
||||||
|
'';
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,66 +6,87 @@
|
||||||
example = {
|
example = {
|
||||||
plugins.nvim-ufo = {
|
plugins.nvim-ufo = {
|
||||||
enable = true;
|
enable = true;
|
||||||
providerSelector = ''
|
settings = {
|
||||||
function(bufnr, filetype, buftype)
|
provider_selector = # Lua
|
||||||
local ftMap = {
|
''
|
||||||
vim = "indent",
|
function(bufnr, filetype, buftype)
|
||||||
python = {"indent"},
|
local ftMap = {
|
||||||
git = ""
|
vim = "indent",
|
||||||
}
|
python = {"indent"},
|
||||||
|
git = ""
|
||||||
|
}
|
||||||
|
|
||||||
return ftMap[filetype]
|
return ftMap[filetype]
|
||||||
end
|
|
||||||
'';
|
|
||||||
|
|
||||||
foldVirtTextHandler = ''
|
|
||||||
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
|
end
|
||||||
curWidth = curWidth + chunkWidth
|
'';
|
||||||
end
|
|
||||||
table.insert(newVirtText, {suffix, 'MoreMsg'})
|
fold_virt_text_handler = # Lua
|
||||||
return newVirtText
|
''
|
||||||
end
|
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
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
defaults = {
|
defaults = {
|
||||||
plugins.nvim-ufo = {
|
plugins.nvim-ufo = {
|
||||||
enable = true;
|
enable = true;
|
||||||
openFoldHlTimeout = 400;
|
settings = {
|
||||||
providerSelector = null;
|
open_fold_hl_timeout = 400;
|
||||||
closeFoldKinds = { };
|
provider_selector = null;
|
||||||
foldVirtTextHandler = null;
|
close_fold_kinds_for_ft = {
|
||||||
enableGetFoldVirtText = false;
|
default = { };
|
||||||
preview = {
|
};
|
||||||
winConfig = {
|
fold_virt_text_handler = null;
|
||||||
border = "rounded";
|
enable_get_fold_virt_text = false;
|
||||||
winblend = 12;
|
preview = {
|
||||||
winhighlight = "Normal:Normal";
|
win_config = {
|
||||||
maxheight = 20;
|
border = "rounded";
|
||||||
|
winblend = 12;
|
||||||
|
winhighlight = "Normal:Normal";
|
||||||
|
maxheight = 20;
|
||||||
|
};
|
||||||
|
mappings = {
|
||||||
|
scrollB = "";
|
||||||
|
scrollF = "";
|
||||||
|
scrollU = "";
|
||||||
|
scrollD = "";
|
||||||
|
scrollE = "<C-E>";
|
||||||
|
scrollY = "<C-Y>";
|
||||||
|
jumpTop = "";
|
||||||
|
jumpBot = "";
|
||||||
|
close = "q";
|
||||||
|
switch = "<Tab>";
|
||||||
|
trace = "<CR>";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
mappings = { };
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue