diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-08-16 15:27:30 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-08-16 15:27:30 +0200 |
commit | 110c6bb413ff7363e9b453edef8ae11cf7b64404 (patch) | |
tree | ce1025c1e15c6be971498d3d60fb46c5bc83e314 | |
parent | 252559601f12e22ad3a687fb8188fdbf63bbdc45 (diff) | |
download | busybox-w32-110c6bb413ff7363e9b453edef8ae11cf7b64404.tar.gz busybox-w32-110c6bb413ff7363e9b453edef8ae11cf7b64404.tar.bz2 busybox-w32-110c6bb413ff7363e9b453edef8ae11cf7b64404.zip |
less: fix bracket search to match behavior of less 481
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | miscutils/less.c | 27 |
1 files 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) | |||
1589 | 1589 | ||
1590 | static void match_right_bracket(char bracket) | 1590 | static void match_right_bracket(char bracket) |
1591 | { | 1591 | { |
1592 | unsigned i; | 1592 | unsigned i = cur_fline; |
1593 | 1593 | ||
1594 | if (cur_fline >= max_fline | 1594 | if (i >= max_fline |
1595 | || strchr(flines[cur_fline], bracket) == NULL | 1595 | || strchr(flines[i], bracket) == NULL |
1596 | ) { | 1596 | ) { |
1597 | print_statusline("No bracket in top line"); | 1597 | print_statusline("No bracket in top line"); |
1598 | return; | 1598 | return; |
1599 | } | 1599 | } |
1600 | |||
1600 | bracket = opp_bracket(bracket); | 1601 | bracket = opp_bracket(bracket); |
1601 | for (i = cur_fline + 1; i < max_fline; i++) { | 1602 | for (; i < max_fline; i++) { |
1602 | if (strchr(flines[i], bracket) != NULL) { | 1603 | if (strchr(flines[i], bracket) != NULL) { |
1603 | buffer_line(i); | 1604 | /* |
1605 | * Line with matched right bracket becomes | ||
1606 | * last visible line | ||
1607 | */ | ||
1608 | buffer_line(i - max_displayed_line); | ||
1604 | return; | 1609 | return; |
1605 | } | 1610 | } |
1606 | } | 1611 | } |
@@ -1609,18 +1614,22 @@ static void match_right_bracket(char bracket) | |||
1609 | 1614 | ||
1610 | static void match_left_bracket(char bracket) | 1615 | static void match_left_bracket(char bracket) |
1611 | { | 1616 | { |
1612 | int i; | 1617 | int i = cur_fline + max_displayed_line; |
1613 | 1618 | ||
1614 | if (cur_fline + max_displayed_line >= max_fline | 1619 | if (i >= max_fline |
1615 | || strchr(flines[cur_fline + max_displayed_line], bracket) == NULL | 1620 | || strchr(flines[i], bracket) == NULL |
1616 | ) { | 1621 | ) { |
1617 | print_statusline("No bracket in bottom line"); | 1622 | print_statusline("No bracket in bottom line"); |
1618 | return; | 1623 | return; |
1619 | } | 1624 | } |
1620 | 1625 | ||
1621 | bracket = opp_bracket(bracket); | 1626 | bracket = opp_bracket(bracket); |
1622 | for (i = cur_fline + max_displayed_line; i >= 0; i--) { | 1627 | for (; i >= 0; i--) { |
1623 | if (strchr(flines[i], bracket) != NULL) { | 1628 | if (strchr(flines[i], bracket) != NULL) { |
1629 | /* | ||
1630 | * Line with matched left bracket becomes | ||
1631 | * first visible line | ||
1632 | */ | ||
1624 | buffer_line(i); | 1633 | buffer_line(i); |
1625 | return; | 1634 | return; |
1626 | } | 1635 | } |