fix(column): estimate 'statuscolumn' width appropriately

Problem:    The 'statuscolumn' width is being estimated without the
            proper context. In particular, this resulted in the fact
            that a custom fold column could be included in the estimated
            `number_width()`, and doubly added when actually drawing the
            statuscolumn due to `win_col_off()` also adding the
            `'foldcolumn'` width. Resulting in a status column that is
            `'foldcolumn'` cells wider than necessary.
Solution:   Estimate 'statuscolumn' width in `get_statuscol_str()` when
            a buffer's line count has changed.
This commit is contained in:
luukvbaal
2023-02-02 10:35:51 +01:00
committed by GitHub
parent 2c5906b55b
commit 64fa75a86a
4 changed files with 36 additions and 10 deletions

View File

@@ -439,7 +439,7 @@ describe('statuscolumn', function()
vim.api.nvim_buf_set_extmark(0, ns, 7, 0, {
virt_lines_leftcol = true, virt_lines = {{{"virt", ""}}} })
]])
feed('lh') -- force update wcol/row
feed('lh') -- force update cursor row
screen:expect([[
4 aaaaa |
5 aaaaa |
@@ -458,5 +458,24 @@ describe('statuscolumn', function()
]])
command('set stc=') -- also for the default sign column
screen:expect_unchanged()
-- 'statuscolumn' is not too wide with custom (bogus) fold column
command([[set stc=%{foldlevel(v:lnum)>0?repeat('-',foldlevel(v:lnum)):''}%=%l\ ]])
feed('Gd10Ggg<C-l>')
screen:expect([[
1 ^aaaaa |
2 aaaaa |
3 aaaaa |
4 aaaaa |
5 aaaaa |
6 aaaaa |
7 aaaaa |
virt |
---------8 aaaaa |
virt |
---------9 aaaaa |
~ |
~ |
|
]])
end)
end)