From a9be5a768b6c06e74a386c474aba8125dfc8ed86 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 30 Jun 2017 22:48:36 +0300 Subject: [PATCH] Fix relative-number display with non-nil display-line-number-width * src/xdisp.c (maybe_produce_line_number): Don't treat a zero value of display-line-number-width as acceptable. Handle the case of 'relative' with display-line-number-width non-nil and smaller than the absolute line number requires. Reported by Alex . --- src/xdisp.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index bcd7d33332f..aeccac2cb16 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -20867,26 +20867,23 @@ maybe_produce_line_number (struct it *it) { if (NATNUMP (Vdisplay_line_number_width)) it->lnum_width = XFASTINT (Vdisplay_line_number_width); + + /* Max line number to be displayed cannot be more than the one + corresponding to the last row of the desired matrix. */ + ptrdiff_t max_lnum; + + if (NILP (Vdisplay_line_numbers_current_absolute) + && (EQ (Vdisplay_line_numbers, Qrelative) + || EQ (Vdisplay_line_numbers, Qvisual))) + /* We subtract one more because the current line is always + zero in this mode. */ + max_lnum = it->w->desired_matrix->nrows - 2; + else if (EQ (Vdisplay_line_numbers, Qvisual)) + max_lnum = it->pt_lnum + it->w->desired_matrix->nrows - 1; else - { - /* Max line number to be displayed cannot be more than - the one corresponding to the last row of the desired - matrix. */ - ptrdiff_t max_lnum; - - if (NILP (Vdisplay_line_numbers_current_absolute) - && (EQ (Vdisplay_line_numbers, Qrelative) - || EQ (Vdisplay_line_numbers, Qvisual))) - /* We subtract one more because the current line is always - zero in this mode. */ - max_lnum = it->w->desired_matrix->nrows - 2; - else if (EQ (Vdisplay_line_numbers, Qvisual)) - max_lnum = it->pt_lnum + it->w->desired_matrix->nrows - 1; - else - max_lnum = this_line + it->w->desired_matrix->nrows - 1 - it->vpos; - max_lnum = max (1, max_lnum); - it->lnum_width = log10 (max_lnum) + 1; - } + max_lnum = this_line + it->w->desired_matrix->nrows - 1 - it->vpos; + max_lnum = max (1, max_lnum); + it->lnum_width = max (it->lnum_width, log10 (max_lnum) + 1); eassert (it->lnum_width > 0); } if (EQ (Vdisplay_line_numbers, Qrelative)) -- 2.11.4.GIT