From 110c6bb413ff7363e9b453edef8ae11cf7b64404 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 16 Aug 2016 15:27:30 +0200 Subject: [PATCH] less: fix bracket search to match behavior of less 481 Signed-off-by: Denys Vlasenko --- miscutils/less.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/miscutils/less.c b/miscutils/less.c index 10e1d8e16..d1d4a71be 100644 --- a/miscutils/less.c +++ b/miscutils/less.c @@ -1589,18 +1589,23 @@ static char opp_bracket(char bracket) static void match_right_bracket(char bracket) { - unsigned i; + unsigned i = cur_fline; - if (cur_fline >= max_fline - || strchr(flines[cur_fline], bracket) == NULL + if (i >= max_fline + || strchr(flines[i], bracket) == NULL ) { print_statusline("No bracket in top line"); return; } + bracket = opp_bracket(bracket); - for (i = cur_fline + 1; i < max_fline; i++) { + for (; i < max_fline; i++) { if (strchr(flines[i], bracket) != NULL) { - buffer_line(i); + /* + * Line with matched right bracket becomes + * last visible line + */ + buffer_line(i - max_displayed_line); return; } } @@ -1609,18 +1614,22 @@ static void match_right_bracket(char bracket) static void match_left_bracket(char bracket) { - int i; + int i = cur_fline + max_displayed_line; - if (cur_fline + max_displayed_line >= max_fline - || strchr(flines[cur_fline + max_displayed_line], bracket) == NULL + if (i >= max_fline + || strchr(flines[i], bracket) == NULL ) { print_statusline("No bracket in bottom line"); return; } bracket = opp_bracket(bracket); - for (i = cur_fline + max_displayed_line; i >= 0; i--) { + for (; i >= 0; i--) { if (strchr(flines[i], bracket) != NULL) { + /* + * Line with matched left bracket becomes + * first visible line + */ buffer_line(i); return; } -- 2.25.1