]> git.lizzy.rs Git - micro.git/commitdiff
Only highlight matching brace if one is found
authorZachary Yedidia <zyedidia@gmail.com>
Wed, 12 Feb 2020 06:32:23 +0000 (01:32 -0500)
committerZachary Yedidia <zyedidia@gmail.com>
Wed, 12 Feb 2020 06:32:23 +0000 (01:32 -0500)
Fixes #1505

internal/action/actions.go
internal/buffer/buffer.go
internal/display/bufwindow.go

index fdef717ac56da9bb47db2c9eb1b0280416b32860..e72bdf965edc49bd67fdf7153c878a8e1c07d593 100644 (file)
@@ -1060,11 +1060,15 @@ func (h *BufPane) JumpToMatchingBrace() bool {
                r := h.Cursor.RuneUnder(h.Cursor.X)
                rl := h.Cursor.RuneUnder(h.Cursor.X - 1)
                if r == bp[0] || r == bp[1] || rl == bp[0] || rl == bp[1] {
-                       matchingBrace, left := h.Buf.FindMatchingBrace(bp, h.Cursor.Loc)
-                       if left {
-                               h.Cursor.GotoLoc(matchingBrace)
+                       matchingBrace, left, found := h.Buf.FindMatchingBrace(bp, h.Cursor.Loc)
+                       if found {
+                               if left {
+                                       h.Cursor.GotoLoc(matchingBrace)
+                               } else {
+                                       h.Cursor.GotoLoc(matchingBrace.Move(1, h.Buf))
+                               }
                        } else {
-                               h.Cursor.GotoLoc(matchingBrace.Move(1, h.Buf))
+                               return false
                        }
                }
        }
index c3b8fa85ef7812b5231eee363dcc17fedd6f6643..e97cf24b08340ebb149451d716cfad47f0b6dbc8 100644 (file)
@@ -821,7 +821,7 @@ var BracePairs = [][2]rune{
 // returns the location of the matching brace
 // if the boolean returned is true then the original matching brace is one character left
 // of the starting location
-func (b *Buffer) FindMatchingBrace(braceType [2]rune, start Loc) (Loc, bool) {
+func (b *Buffer) FindMatchingBrace(braceType [2]rune, start Loc) (Loc, bool, bool) {
        curLine := []rune(string(b.LineBytes(start.Y)))
        startChar := ' '
        if start.X >= 0 && start.X < len(curLine) {
@@ -851,9 +851,9 @@ func (b *Buffer) FindMatchingBrace(braceType [2]rune, start Loc) (Loc, bool) {
                                        i--
                                        if i == 0 {
                                                if startChar == braceType[0] {
-                                                       return Loc{x, y}, false
+                                                       return Loc{x, y}, false, true
                                                }
-                                               return Loc{x, y}, true
+                                               return Loc{x, y}, true, true
                                        }
                                }
                        }
@@ -875,9 +875,9 @@ func (b *Buffer) FindMatchingBrace(braceType [2]rune, start Loc) (Loc, bool) {
                                        i--
                                        if i == 0 {
                                                if leftChar == braceType[1] {
-                                                       return Loc{x, y}, true
+                                                       return Loc{x, y}, true, true
                                                }
-                                               return Loc{x, y}, false
+                                               return Loc{x, y}, false, true
                                        }
                                } else if r == braceType[1] {
                                        i++
@@ -885,7 +885,7 @@ func (b *Buffer) FindMatchingBrace(braceType [2]rune, start Loc) (Loc, bool) {
                        }
                }
        }
-       return start, true
+       return start, true, false
 }
 
 // Retab changes all tabs to spaces or vice versa
index b2b8de438c4eea2a09e0cb88b0dd634a8d1818fc..dd6c7f63795e40d3e4d853ef73a4ddfce6fb746c 100644 (file)
@@ -452,12 +452,14 @@ func (w *BufWindow) displayBuffer() {
                                r := c.RuneUnder(curX)
                                rl := c.RuneUnder(curX - 1)
                                if r == bp[0] || r == bp[1] || rl == bp[0] || rl == bp[1] {
-                                       mb, left := b.FindMatchingBrace(bp, curLoc)
-                                       matchingBraces = append(matchingBraces, mb)
-                                       if !left {
-                                               matchingBraces = append(matchingBraces, curLoc)
-                                       } else {
-                                               matchingBraces = append(matchingBraces, curLoc.Move(-1, b))
+                                       mb, left, found := b.FindMatchingBrace(bp, curLoc)
+                                       if found {
+                                               matchingBraces = append(matchingBraces, mb)
+                                               if !left {
+                                                       matchingBraces = append(matchingBraces, curLoc)
+                                               } else {
+                                                       matchingBraces = append(matchingBraces, curLoc.Move(-1, b))
+                                               }
                                        }
                                }
                        }