mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 19:38:20 +00:00
fix(column): add truncated width during estimation for 'statuscolumn'
Problem: Estimated 'statuscolumn' width estimated is not properly used,
executing the `w_redr_statuscol` path unnecessarily.
Solution: Adjust `w_nrwidth` and 'statuscolumn' width before anything
is actually drawn in a `win_update()`.
(cherry picked from commit 309eeb4109
)
This commit is contained in:

committed by
github-actions[bot]
![github-actions[bot]](/assets/img/avatar_default.png)
parent
f64518ed9c
commit
2479c63d4a
@@ -656,7 +656,15 @@ static void get_statuscol_str(win_T *wp, linenr_T lnum, int virtnum, statuscol_T
|
|||||||
wp->w_statuscol_line_count = wp->w_nrwidth_line_count;
|
wp->w_statuscol_line_count = wp->w_nrwidth_line_count;
|
||||||
set_vim_var_nr(VV_VIRTNUM, 0);
|
set_vim_var_nr(VV_VIRTNUM, 0);
|
||||||
build_statuscol_str(wp, wp->w_nrwidth_line_count, 0, stcp);
|
build_statuscol_str(wp, wp->w_nrwidth_line_count, 0, stcp);
|
||||||
stcp->width += stcp->truncate;
|
if (stcp->truncate > 0) {
|
||||||
|
// Add truncated width to avoid unnecessary redraws
|
||||||
|
int addwidth = MIN(stcp->truncate, MAX_NUMBERWIDTH - wp->w_nrwidth);
|
||||||
|
stcp->truncate = 0;
|
||||||
|
stcp->width += addwidth;
|
||||||
|
wp->w_nrwidth += addwidth;
|
||||||
|
wp->w_nrwidth_width = wp->w_nrwidth;
|
||||||
|
wp->w_valid &= ~VALID_WCOL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
set_vim_var_nr(VV_VIRTNUM, virtnum);
|
set_vim_var_nr(VV_VIRTNUM, virtnum);
|
||||||
|
|
||||||
|
@@ -616,4 +616,17 @@ describe('statuscolumn', function()
|
|||||||
|
|
|
|
||||||
]])
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("is only evaluated twice, once to estimate and once to draw", function()
|
||||||
|
command([[
|
||||||
|
let g:stcnr = 0
|
||||||
|
func! Stc()
|
||||||
|
let g:stcnr += 1
|
||||||
|
return '12345'
|
||||||
|
endfunc
|
||||||
|
set stc=%!Stc()
|
||||||
|
norm ggdG
|
||||||
|
]])
|
||||||
|
eq(2, eval('g:stcnr'))
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
Reference in New Issue
Block a user