fix(signcol): handle edge case with maximum value

50250542 failed to consider that the maximum passed to buf_signcols
is window scoped whereas the signcols value is buffer scoped. This can
lead to a bug where the signcolumn becomes incorrect if:
- global signcolumn is set to auto:N
- signcolumn in a window is changed locally to auto:M where M > N
- the buffer has a line with M or greater signs.
This commit is contained in:
Lewis Russell
2022-02-20 17:26:39 +00:00
parent fdea15723f
commit e67cd22c38
3 changed files with 10 additions and 1 deletions

View File

@@ -5495,11 +5495,19 @@ static int buf_signcols_inner(buf_T *buf, int maximum)
int buf_signcols(buf_T *buf, int maximum)
{
// The maximum can be determined from 'signcolumn' which is window scoped so
// need to invalidate signcols if the maximum is greater than the previous
// maximum.
if (maximum > buf->b_signcols_max) {
buf->b_signcols_valid = false;
}
if (!buf->b_signcols_valid) {
int signcols = buf_signcols_inner(buf, maximum);
// Check if we need to redraw
if (signcols != buf->b_signcols) {
buf->b_signcols = signcols;
buf->b_signcols_max = maximum;
redraw_buf_later(buf, NOT_VALID);
}