mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 03:05:11 -07:00
fix(column): rebuild status column when sign column is invalid
This commit is contained in:
parent
d799456a6b
commit
44d4f03573
@ -1397,10 +1397,6 @@ static void win_update(win_T *wp, DecorProviders *providers)
|
||||
if (type >= UPD_NOT_VALID) {
|
||||
wp->w_redr_status = true;
|
||||
wp->w_lines_valid = 0;
|
||||
if (*wp->w_p_stc != NUL) {
|
||||
wp->w_nrwidth_line_count = 0; // make sure width is reset
|
||||
wp->w_statuscol_line_count = 0; // make sure width is re-estimated
|
||||
}
|
||||
}
|
||||
|
||||
// Window is zero-height: Only need to draw the separator
|
||||
@ -2528,6 +2524,7 @@ int number_width(win_T *wp)
|
||||
|
||||
// reset for 'statuscolumn'
|
||||
if (*wp->w_p_stc != NUL) {
|
||||
wp->w_statuscol_line_count = 0; // make sure width is re-estimated
|
||||
wp->w_nrwidth_width = (wp->w_p_nu || wp->w_p_rnu) * (int)wp->w_p_nuw;
|
||||
return wp->w_nrwidth_width;
|
||||
}
|
||||
|
@ -2189,9 +2189,8 @@ static const char *set_bool_option(const int opt_idx, char *const varp, const in
|
||||
errmsg = did_set_spelllang(curwin);
|
||||
}
|
||||
} else if ((int *)varp == &curwin->w_p_nu && *curwin->w_p_stc != NUL) {
|
||||
// When 'statuscolumn' is set and 'number' is changed:
|
||||
curwin->w_nrwidth_line_count = 0; // make sure width is reset
|
||||
curwin->w_statuscol_line_count = 0; // make sure width is re-estimated
|
||||
// When 'number' is changed and 'statuscolumn' is set, make sure width is reset.
|
||||
curwin->w_nrwidth_line_count = 0;
|
||||
}
|
||||
|
||||
if ((int *)varp == &curwin->w_p_arab) {
|
||||
@ -5531,6 +5530,13 @@ int win_signcol_configured(win_T *wp, int *is_fixed)
|
||||
if (*scl == 'n'
|
||||
&& (*(scl + 1) == 'o' || (*(scl + 1) == 'u'
|
||||
&& (wp->w_p_nu || wp->w_p_rnu)))) {
|
||||
if (!wp->w_buffer->b_signcols.valid) {
|
||||
FOR_ALL_WINDOWS_IN_TAB(win, curtab) {
|
||||
if (*win->w_p_stc != NUL) {
|
||||
win->w_nrwidth_line_count = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (*wp->w_p_stc != NUL) {
|
||||
buf_signcols(wp->w_buffer, 0);
|
||||
}
|
||||
|
@ -1202,8 +1202,8 @@ static void did_set_statusline(win_T *win, char **varp, char **gvarp, const char
|
||||
if (varp == &p_ruf) { // reset ru_wid first
|
||||
ru_wid = 0;
|
||||
} else if (varp == &win->w_p_stc) {
|
||||
win->w_nrwidth_line_count = 0; // make sure width is reset
|
||||
win->w_statuscol_line_count = 0; // make sure width is re-estimated
|
||||
// reset 'statuscolumn' width
|
||||
win->w_nrwidth_line_count = 0;
|
||||
}
|
||||
char *s = *varp;
|
||||
if (varp == &p_ruf && *s == '%') {
|
||||
|
@ -648,6 +648,14 @@ describe('statuscolumn', function()
|
||||
2 aaaaa |
|
||||
|
|
||||
]])
|
||||
-- In all windows
|
||||
command('wincmd v | set ls=0')
|
||||
command('sign place 1 line=2 name=sign')
|
||||
screen:expect([[
|
||||
1 ^aaaaa │1 aaaaa |
|
||||
2 ssaaaaa │2 ssaaaaa |
|
||||
|
|
||||
]])
|
||||
end)
|
||||
|
||||
it("is only evaluated twice, once to estimate and once to draw", function()
|
||||
|
Loading…
Reference in New Issue
Block a user