less: fix bracket search to match behavior of less 481

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2016-08-16 15:27:30 +02:00
parent 252559601f
commit 110c6bb413

View File

@ -1589,18 +1589,23 @@ static char opp_bracket(char bracket)
static void match_right_bracket(char bracket) static void match_right_bracket(char bracket)
{ {
unsigned i; unsigned i = cur_fline;
if (cur_fline >= max_fline if (i >= max_fline
|| strchr(flines[cur_fline], bracket) == NULL || strchr(flines[i], bracket) == NULL
) { ) {
print_statusline("No bracket in top line"); print_statusline("No bracket in top line");
return; return;
} }
bracket = opp_bracket(bracket); bracket = opp_bracket(bracket);
for (i = cur_fline + 1; i < max_fline; i++) { for (; i < max_fline; i++) {
if (strchr(flines[i], bracket) != NULL) { 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; return;
} }
} }
@ -1609,18 +1614,22 @@ static void match_right_bracket(char bracket)
static void match_left_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 if (i >= max_fline
|| strchr(flines[cur_fline + max_displayed_line], bracket) == NULL || strchr(flines[i], bracket) == NULL
) { ) {
print_statusline("No bracket in bottom line"); print_statusline("No bracket in bottom line");
return; return;
} }
bracket = opp_bracket(bracket); bracket = opp_bracket(bracket);
for (i = cur_fline + max_displayed_line; i >= 0; i--) { for (; i >= 0; i--) {
if (strchr(flines[i], bracket) != NULL) { if (strchr(flines[i], bracket) != NULL) {
/*
* Line with matched left bracket becomes
* first visible line
*/
buffer_line(i); buffer_line(i);
return; return;
} }