less: fix bracket search to match behavior of less 481
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 16 Aug 2016 13:27:30 +0000 (15:27 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 16 Aug 2016 13:27:30 +0000 (15:27 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/less.c

index 10e1d8e1602d8ae0cd160b61ea7d95723b5dd23e..d1d4a71be815fbf09c3b0c8513776c16d615e015 100644 (file)
@@ -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;
                }