]> git.lizzy.rs Git - micro.git/blobdiff - internal/display/statusline.go
Fix internal string binding representation
[micro.git] / internal / display / statusline.go
index c139c8c6ab46f16af930fecc62b8f8632319a5a0..947a3ee7b48b828dce783829f0367ac6f8ddfa2f 100644 (file)
@@ -3,21 +3,19 @@ package display
 import (
        "bytes"
        "fmt"
-       "path"
        "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
@@ -32,9 +30,6 @@ type StatusLine struct {
 
 var statusInfo = map[string]func(*buffer.Buffer) string{
        "filename": func(b *buffer.Buffer) string {
-               if b.Settings["basename"].(bool) {
-                       return path.Base(b.GetName())
-               }
                return b.GetName()
        },
        "line": func(b *buffer.Buffer) string {
@@ -47,6 +42,9 @@ var statusInfo = map[string]func(*buffer.Buffer) string{
                if b.Modified() {
                        return "+ "
                }
+               if b.Type.Readonly {
+                       return "[ro] "
+               }
                return ""
        },
 }
@@ -100,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 {
@@ -107,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
@@ -118,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
@@ -132,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
@@ -145,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)
                                }
@@ -169,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)