From 6588f02f7bde14a0958ebd7b590d044799e34860 Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Wed, 12 Feb 2020 01:32:23 -0500 Subject: [PATCH] Only highlight matching brace if one is found Fixes #1505 --- internal/action/actions.go | 12 ++++++++---- internal/buffer/buffer.go | 12 ++++++------ internal/display/bufwindow.go | 14 ++++++++------ 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/internal/action/actions.go b/internal/action/actions.go index fdef717a..e72bdf96 100644 --- a/internal/action/actions.go +++ b/internal/action/actions.go @@ -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 } } } diff --git a/internal/buffer/buffer.go b/internal/buffer/buffer.go index c3b8fa85..e97cf24b 100644 --- a/internal/buffer/buffer.go +++ b/internal/buffer/buffer.go @@ -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 diff --git a/internal/display/bufwindow.go b/internal/display/bufwindow.go index b2b8de43..dd6c7f63 100644 --- a/internal/display/bufwindow.go +++ b/internal/display/bufwindow.go @@ -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)) + } } } }