]> git.lizzy.rs Git - micro.git/blobdiff - internal/display/statusline.go
Fix internal string binding representation
[micro.git] / internal / display / statusline.go
index c84215dbd935ada776411f0f0add7c37a43a0aeb..947a3ee7b48b828dce783829f0367ac6f8ddfa2f 100644 (file)
@@ -6,17 +6,16 @@ import (
        "regexp"
        "strconv"
        "strings"
-       "unicode/utf8"
 
        luar "layeh.com/gopher-luar"
 
        runewidth "github.com/mattn/go-runewidth"
        lua "github.com/yuin/gopher-lua"
-       "github.com/zyedidia/micro/internal/buffer"
-       "github.com/zyedidia/micro/internal/config"
-       ulua "github.com/zyedidia/micro/internal/lua"
-       "github.com/zyedidia/micro/internal/screen"
-       "github.com/zyedidia/micro/internal/util"
+       "github.com/zyedidia/micro/v2/internal/buffer"
+       "github.com/zyedidia/micro/v2/internal/config"
+       ulua "github.com/zyedidia/micro/v2/internal/lua"
+       "github.com/zyedidia/micro/v2/internal/screen"
+       "github.com/zyedidia/micro/v2/internal/util"
 )
 
 // StatusLine represents the information line at the bottom
@@ -99,6 +98,8 @@ func (s *StatusLine) Display() {
        // We'll draw the line at the lowest line in the window
        y := s.win.Height + s.win.Y - 1
 
+       winX := s.win.X
+
        b := s.win.Buf
        // autocomplete suggestions (for the buffer, not for the infowindow)
        if b.HasSuggestions && len(b.Suggestions) > 1 {
@@ -106,10 +107,6 @@ func (s *StatusLine) Display() {
                if style, ok := config.Colorscheme["statusline"]; ok {
                        statusLineStyle = style
                }
-               keymenuOffset := 0
-               if config.GetGlobalOption("keymenu").(bool) {
-                       keymenuOffset = len(keydisplay)
-               }
                x := 0
                for j, sug := range b.Suggestions {
                        style := statusLineStyle
@@ -117,13 +114,13 @@ func (s *StatusLine) Display() {
                                style = style.Reverse(true)
                        }
                        for _, r := range sug {
-                               screen.SetContent(x, y-keymenuOffset, r, nil, style)
+                               screen.SetContent(winX+x, y, r, nil, style)
                                x++
                                if x >= s.win.Width {
                                        return
                                }
                        }
-                       screen.SetContent(x, y-keymenuOffset, ' ', nil, statusLineStyle)
+                       screen.SetContent(winX+x, y, ' ', nil, statusLineStyle)
                        x++
                        if x >= s.win.Width {
                                return
@@ -131,7 +128,7 @@ func (s *StatusLine) Display() {
                }
 
                for x < s.win.Width {
-                       screen.SetContent(x, y-keymenuOffset, ' ', nil, statusLineStyle)
+                       screen.SetContent(winX+x, y, ' ', nil, statusLineStyle)
                        x++
                }
                return
@@ -144,7 +141,7 @@ func (s *StatusLine) Display() {
                        return []byte(fmt.Sprint(s.FindOpt(string(option))))
                } else if bytes.HasPrefix(name, []byte("bind")) {
                        binding := string(name[5:])
-                       for k, v := range config.Bindings {
+                       for k, v := range config.Bindings["buffer"] {
                                if v == binding {
                                        return []byte(k)
                                }
@@ -168,34 +165,35 @@ func (s *StatusLine) Display() {
                statusLineStyle = style
        }
 
-       leftLen := util.StringWidth(leftText, utf8.RuneCount(leftText), 1)
-       rightLen := util.StringWidth(rightText, utf8.RuneCount(rightText), 1)
+       leftLen := util.StringWidth(leftText, util.CharacterCount(leftText), 1)
+       rightLen := util.StringWidth(rightText, util.CharacterCount(rightText), 1)
 
-       winX := s.win.X
        for x := 0; x < s.win.Width; x++ {
                if x < leftLen {
-                       r, size := utf8.DecodeRune(leftText)
+                       r, combc, size := util.DecodeCharacter(leftText)
                        leftText = leftText[size:]
                        rw := runewidth.RuneWidth(r)
                        for j := 0; j < rw; j++ {
                                c := r
                                if j > 0 {
                                        c = ' '
+                                       combc = nil
                                        x++
                                }
-                               screen.SetContent(winX+x, y, c, nil, statusLineStyle)
+                               screen.SetContent(winX+x, y, c, combc, statusLineStyle)
                        }
                } else if x >= s.win.Width-rightLen && x < rightLen+s.win.Width-rightLen {
-                       r, size := utf8.DecodeRune(rightText)
+                       r, combc, size := util.DecodeCharacter(rightText)
                        rightText = rightText[size:]
                        rw := runewidth.RuneWidth(r)
                        for j := 0; j < rw; j++ {
                                c := r
                                if j > 0 {
                                        c = ' '
+                                       combc = nil
                                        x++
                                }
-                               screen.SetContent(winX+x, y, c, nil, statusLineStyle)
+                               screen.SetContent(winX+x, y, c, combc, statusLineStyle)
                        }
                } else {
                        screen.SetContent(winX+x, y, ' ', nil, statusLineStyle)