From dda1b167c9f919cad0d25c6f1c0793925be63e93 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Sun, 22 Dec 2019 19:27:48 +0100 Subject: [PATCH] help: don't waste the last column in the help viewer on narrow terminals When a line in a help text is wider than the terminal, then do not break that line at COLS - 1, but simply at COLS. In olden times it made some sense to have an empty column on the right of the introductory text, to mirror the one on the left. But since the width of the introductions got limited to 74 columns (four years ago, in commit a9aa0ef9), those texts have (on a default 80-column terminal) at least six empty columns on their righthand side. And on narrower terminals, we really don't want to waste anything and should use all available space. Also, this whole mechanism of making an exception for end-of-string or end-of-paragraph and letting only those make use of the final column, it was a waste of time: it kind-of did the whole break_line() process again, but then for the entire string (which can be some five hundred characters long in the introductory texts). So... get rid of it, make it simple. On an 80-column terminal it doesn't make any difference. --- src/help.c | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/help.c b/src/help.c index 6db4e6a4..b6aa3213 100644 --- a/src/help.c +++ b/src/help.c @@ -576,28 +576,13 @@ functionptrtype parse_help_input(int *kbinput) /* Calculate the displayable length of the help-text line starting at ptr. */ size_t help_line_len(const char *ptr) { - size_t wrapping_point = (COLS > 24) ? COLS - 1 : 24; - /* The target width for wrapping long lines. */ - ssize_t wrap_location; - /* Actual position where the line can be wrapped. */ - size_t length = 0; - /* Full length of the line, until the first newline. */ + size_t wrapping_point = (COLS < 24) ? 24 : COLS; /* Avoid overwide paragraphs in the introductory text. */ if (ptr < end_of_intro && COLS > 74) wrapping_point = 74; - wrap_location = break_line(ptr, wrapping_point, TRUE); - - /* Get the length of the entire line up to a null or a newline. */ - while (*(ptr + length) != '\0' && *(ptr + length) != '\n') - length = step_right(ptr, length); - - /* If the entire line will just fit the screen, don't wrap it. */ - if (wideness(ptr, length) <= wrapping_point + 1) - return length; - else - return wrap_location; + return break_line(ptr, wrapping_point, TRUE); } #endif /* ENABLE_HELP */