New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How can I make it look equal to its configuration #4
Comments
I will add the note under demo later. |
Actually I haven't used that PR, I hacked myself a long ago, and found that PR recently. diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index 2ee7cd44f..8982bd2ee 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -1931,12 +1931,8 @@ static size_t fill_foldcolumn(char_u *p, win_T *wp, foldinfo_T foldinfo, linenr_
if (foldinfo.fi_lnum == lnum
&& first_level + i >= foldinfo.fi_low_level) {
symbol = wp->w_p_fcs_chars.foldopen;
- } else if (first_level == 1) {
- symbol = wp->w_p_fcs_chars.foldsep;
- } else if (first_level + i <= 9) {
- symbol = '0' + first_level + i;
} else {
- symbol = '>';
+ symbol = wp->w_p_fcs_chars.foldsep;
}
len = utf_char2bytes(symbol, (char *)&p[char_counter]); |
Tanks |
@CRAG666 @kevinhwang91 How to remove the number '2' sign in the image above? |
For now, must compile Neovim source code. |
@hisamafahri |
I have found a temporary workaround for this issue, if you set Only this way you have to live with the bigger column on the left side, which I actually kind of like since it also shows you the fold levels by shifting the little markers correctly. |
font:
normal:
family: Hack Nerd Font Search |
thanks a lot |
|
How do I change the color of filechars? |
|
I am trying my best to imp #24 which I think is better than VSCode UI. Suggestions are welcome. |
if you set |
I thought the number displayed is a bug. After reading this, I understand it is a feature. |
Yes, it is a feature. However, at least for me, the problem is that there isn't seem to be a way to configure the fold columns to resize dynamically as they are needed. You either have:
If I am wrong about this please anybody let me know :) |
Currently there are display issues that needs to be addressed in nvim core, see kevinhwang91/nvim-ufo#4 .
@kevinhwang91 hey! if i don't want to recompile nvim, can i disable foldcolumn until PR is merged? i tried to set it to |
Sure. |
i did that, tho i thought it was your plugin who does this :D even tho i didn't find such code in repo...okay, thank you, i will try to use some rg in plugins dir to find who is changing that, thank you! |
Update of the patch from above: From b9de2d3eddac3cc9bd2c03f8adaca13b0da14fef Mon Sep 17 00:00:00 2001
From: WhiteBlackGoose <wbg@angouri.org>
Date: Sat, 3 Dec 2022 21:47:29 +0300
Subject: [PATCH] folding UI made nicer
---
src/nvim/screen.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index 865520657..52d619fff 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -215,12 +215,8 @@ size_t fill_foldcolumn(char_u *p, win_T *wp, foldinfo_T foldinfo, linenr_T lnum)
if (foldinfo.fi_lnum == lnum
&& first_level + i >= foldinfo.fi_low_level) {
symbol = wp->w_p_fcs_chars.foldopen;
- } else if (first_level == 1) {
- symbol = wp->w_p_fcs_chars.foldsep;
- } else if (first_level + i <= 9) {
- symbol = '0' + first_level + i;
} else {
- symbol = '>';
+ symbol = wp->w_p_fcs_chars.foldsep;
}
len = utf_char2bytes(symbol, (char *)&p[char_counter]);
--
2.38.1 FWIW I decided to maintain my fork of neovim. If I'm not lazy, I will make it autorelease |
I did, I just asked to clarify things for myself since I don't want to assume anything.
Ok, got it now. Thank you for your awesome work 🙏🏼 |
One thing I've noticed is using the This makes the |
One of the easiest solutions. Here's quick config which works for me: -- packer
use {
"kevinhwang91/nvim-ufo",
requires = {
"kevinhwang91/promise-async",
{
"luukvbaal/statuscol.nvim",
config = function()
local builtin = require("statuscol.builtin")
require("statuscol").setup(
{
relculright = true,
segments = {
{text = {builtin.foldfunc}, click = "v:lua.ScFa"},
{text = {"%s"}, click = "v:lua.ScSa"},
{text = {builtin.lnumfunc, " "}, click = "v:lua.ScLa"}
}
}
)
end
}
}
} and vim.o.foldcolumn = "1" -- '0' is not bad
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
vim.o.foldlevelstart = 99
vim.o.foldenable = true
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
-- these are "extra", change them as you like
vim.keymap.set("n", "zR", require("ufo").openAllFolds)
vim.keymap.set("n", "zM", require("ufo").closeAllFolds)
-- Option 3: treesitter as a main provider instead
-- Only depend on `nvim-treesitter/queries/filetype/folds.scm`,
-- performance and stability are better than `foldmethod=nvim_treesitter#foldexpr()`
require("ufo").setup(
{
provider_selector = function(bufnr, filetype, buftype)
return {"treesitter", "indent"}
end
}
)
|
Hi, how do I enable the vertical indentation/folding level indicators? |
@rsdubtso Put If this is not what you need, may I ask what you mean by |
@rsdubtso I've been using indent-blankline.nvim with folliwing config: require("indent_blankline").setup {
char = "▏",
buftype_exclude = {"terminal"},
show_trailing_blankline_indent = false,
show_current_context = true,
filetype_exclude = {"help", "terminal"},
-- default : {'class', 'function', 'method'}
context_patterns = {
"class",
"function",
"method",
"^if",
"^while",
"^for",
"^object",
"^table",
"^type",
"^import",
"block",
"arguments"
}
-- disabled now for performance hit.
-- use_treesitter = true
} |
@rsdubtso That's implemented by other plugins, not nvim-ufo. Please check indentLine, or indent-blankline. |
D'oh! Thanks a lot!. Hope this discussion is at least somewhat useful for future readers... |
neovim v0.9.0 About line 421.
|
@kevinhwang91 Now that Neovim 0.9.0 is out, what is the right way to enable this look? |
@pedropombeiro Now the plugin statuscol.nvim is stable enough and is worth a trying. The alternative approach is to change the code in |
Here is my entire UFO + Folding preview config, just in case someone needs this.
-- UFO folding
vim.o.foldcolumn = "1" -- '0' is not bad
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
vim.o.foldlevelstart = 99
vim.o.foldenable = true
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
return {
-- UFO folding
{
"kevinhwang91/nvim-ufo",
dependencies = {
"kevinhwang91/promise-async",
{
"luukvbaal/statuscol.nvim",
config = function()
local builtin = require("statuscol.builtin")
require("statuscol").setup({
relculright = true,
segments = {
{ text = { builtin.foldfunc }, click = "v:lua.ScFa" },
{ text = { "%s" }, click = "v:lua.ScSa" },
{ text = { builtin.lnumfunc, " " }, click = "v:lua.ScLa" },
},
})
end,
},
},
event = "BufReadPost",
opts = {
provider_selector = function()
return { "treesitter", "indent" }
end,
},
init = function()
vim.keymap.set("n", "zR", function()
require("ufo").openAllFolds()
end)
vim.keymap.set("n", "zM", function()
require("ufo").closeAllFolds()
end)
end,
},
-- Folding preview, by default h and l keys are used.
-- On first press of h key, when cursor is on a closed fold, the preview will be shown.
-- On second press the preview will be closed and fold will be opened.
-- When preview is opened, the l key will close it and open fold. In all other cases these keys will work as usual.
{ "anuvyklack/fold-preview.nvim", dependencies = "anuvyklack/keymap-amend.nvim", config = true },
} |
Let me join the party and share my config with one small extra "feature" of displaying the number of hidden rows near the colorcolumn or window edge (whichever is smaller). return {
"kevinhwang91/nvim-ufo",
dependencies = "kevinhwang91/promise-async",
event = "VeryLazy",
opts = {
-- INFO: Uncomment to use treeitter as fold provider, otherwise nvim lsp is used
-- provider_selector = function(bufnr, filetype, buftype)
-- return { "treesitter", "indent" }
-- end,
open_fold_hl_timeout = 400,
close_fold_kinds = { "imports", "comment" },
preview = {
win_config = {
border = { "", "─", "", "", "", "─", "", "" },
-- winhighlight = "Normal:Folded",
winblend = 0,
},
mappings = {
scrollU = "<C-u>",
scrollD = "<C-d>",
jumpTop = "[",
jumpBot = "]",
},
},
},
init = function()
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
vim.o.foldcolumn = "1" -- '0' is not bad
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
vim.o.foldlevelstart = 99
vim.o.foldenable = true
end,
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", "zR", require("ufo").openAllFolds)
vim.keymap.set("n", "zM", require("ufo").closeAllFolds)
vim.keymap.set("n", "zr", require("ufo").openFoldsExceptKinds)
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,
} |
@awerebea thats just amazing. However the arrow and percentage for me appear where the code ends not and the end of the window like yours. How did you modify the 'hidden' data to be at the end of the window? |
Hey @sudoCompetence! Glad you like it.
Well, I just took the example from Customize fold text and modified it to take into account the |
Idk if it's just me, but on nightly I had to change my statuscol config to include |
Currently my line looks like this and I would like it to be seen as yours
The text was updated successfully, but these errors were encountered: