mirror of
https://github.com/neovim/neovim.git
synced 2025-09-29 22:48:34 +00:00
fix(column): don't reset 'statuscolumn' width after it has been drawn
Problem: 'statuscolumn' width may be reset after it has been drawn when multiple windows contain the same buffer. This results in an offset for the drawn cursor position. Solution: Loop over all windows (twice) prior to drawing them to reset the 'statuscolumn' width and validate the sign column when necessary.
This commit is contained in:
@@ -5947,6 +5947,14 @@ int win_signcol_count(win_T *wp)
|
||||
return win_signcol_configured(wp, NULL);
|
||||
}
|
||||
|
||||
/// Return true when window "wp" has no sign column.
|
||||
bool win_no_signcol(win_T *wp)
|
||||
{
|
||||
const char *scl = wp->w_p_scl;
|
||||
return (*scl == 'n' && (*(scl + 1) == 'o' || (*(scl + 1) == 'u'
|
||||
&& (wp->w_p_nu || wp->w_p_rnu))));
|
||||
}
|
||||
|
||||
/// Return the number of requested sign columns, based on user / configuration.
|
||||
int win_signcol_configured(win_T *wp, int *is_fixed)
|
||||
{
|
||||
@@ -5956,20 +5964,7 @@ int win_signcol_configured(win_T *wp, int *is_fixed)
|
||||
*is_fixed = 1;
|
||||
}
|
||||
|
||||
// Note: It checks "no" or "number" in 'signcolumn' option
|
||||
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);
|
||||
}
|
||||
if (win_no_signcol(wp)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user