diff --git a/cmd/micro/cellview.go b/cmd/micro/cellview.go index c33d2925..9c50856e 100644 --- a/cmd/micro/cellview.go +++ b/cmd/micro/cellview.go @@ -73,9 +73,20 @@ func (c *CellView) Draw(buf *Buffer, top, height, left, width int) { // bracePairs is defined in buffer.go if buf.Settings["matchbrace"].(bool) { for _, bp := range bracePairs { - r := buf.Cursor.RuneUnder(buf.Cursor.X) - if r == bp[0] || r == bp[1] { + if buf.Cursor.RuneUnder(buf.Cursor.X) == bp[0] { matchingBrace = buf.FindMatchingBrace(bp, buf.Cursor.Loc) + break + } + left := buf.Cursor.Loc.X + if buf.Settings["matchbraceleft"].(bool) { + left -= 1 + if left < 0 { + left = 0 + } + } + if buf.Cursor.RuneUnder(left) == bp[1] { + matchingBrace = buf.FindMatchingBrace( + bp, Loc{X: left, Y: buf.Cursor.Loc.Y}) } } } diff --git a/cmd/micro/settings.go b/cmd/micro/settings.go index cf1b2093..9466227e 100644 --- a/cmd/micro/settings.go +++ b/cmd/micro/settings.go @@ -215,6 +215,7 @@ func DefaultGlobalSettings() map[string]interface{} { "keepautoindent": false, "keymenu": false, "matchbrace": false, + "matchbraceleft": false, "mouse": true, "pluginchannels": []string{"https://raw.githubusercontent.com/micro-editor/plugin-channel/master/channel.json"}, "pluginrepos": []string{}, @@ -257,6 +258,7 @@ func DefaultLocalSettings() map[string]interface{} { "indentchar": " ", "keepautoindent": false, "matchbrace": false, + "matchbraceleft": false, "rmtrailingws": false, "ruler": true, "savecursor": false, diff --git a/runtime/help/options.md b/runtime/help/options.md index 3ef67a06..a767f5bd 100644 --- a/runtime/help/options.md +++ b/runtime/help/options.md @@ -186,6 +186,12 @@ Here are the options that you can set: default value: `false` +* `matchbraceleft`: when matching a closing brace, should matching match the + brace directly under the cursor, or the character to the left? only matters + if `matchbrace` is true + + default value: `false` + * `syntax`: turns syntax on or off. default value: `true`