From 1ecb996fd2641e6ad3fdf07e78781823c71fcf13 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Fri, 24 Jul 2015 14:29:45 +0100 Subject: [PATCH] less: allow use of last column of terminal When read_lines tests whether a character will fit on the current line it checks the *next* character but in case of overflow doesn't display the *current* one. This results in the last column of the terminal never being used. The test in re_wrap (used when the terminal width changes or line numbers are enabled/disabled) is different: it does allow the use of the final column. function old new delta read_lines 764 770 +6 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 6/0) Total: 6 bytes Signed-off-by: Ron Yorston Signed-off-by: Denys Vlasenko --- miscutils/less.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/miscutils/less.c b/miscutils/less.c index 5c53cbdbf..b38fcf766 100644 --- a/miscutils/less.c +++ b/miscutils/less.c @@ -512,16 +512,6 @@ static void read_lines(void) *--p = '\0'; continue; } - { - size_t new_last_line_pos = last_line_pos + 1; - if (c == '\t') { - new_last_line_pos += 7; - new_last_line_pos &= (~7); - } - if ((int)new_last_line_pos >= w) - break; - last_line_pos = new_last_line_pos; - } /* ok, we will eat this char */ readpos++; if (c == '\n') { @@ -533,6 +523,16 @@ static void read_lines(void) if (c == '\0') c = '\n'; *p++ = c; *p = '\0'; + { + size_t new_last_line_pos = last_line_pos + 1; + if (c == '\t') { + new_last_line_pos += 7; + new_last_line_pos &= (~7); + } + if ((int)new_last_line_pos >= w) + break; + last_line_pos = new_last_line_pos; + } } /* end of "read chars until we have a line" loop */ #if 0 //BUG: also triggers on this: