diff --git a/cmd/micro/cursor.go b/cmd/micro/cursor.go index c6eb92ae..983c5e20 100644 --- a/cmd/micro/cursor.go +++ b/cmd/micro/cursor.go @@ -331,6 +331,7 @@ func (c *Cursor) GetVisualX() int { runes := []rune(c.buf.Line(c.Y)) tabSize := int(c.buf.Settings["tabsize"].(float64)) return StringWidth(string(runes[:c.X]), tabSize) + // return c.Loc.X } // Relocate makes sure that the cursor is inside the bounds of the buffer diff --git a/cmd/micro/util.go b/cmd/micro/util.go index a91295fe..ecd6e7cb 100644 --- a/cmd/micro/util.go +++ b/cmd/micro/util.go @@ -294,3 +294,17 @@ func JoinCommandArgs(args ...string) string { return buf.String() } + +func Sub(str string, start, end int) string { + len := Count(str) + if len > start && len > end { + return str[start:end] + } + if len > start && len < end { + return str[start:] + } + if len < start { + return str + } + return "" +} diff --git a/cmd/micro/view.go b/cmd/micro/view.go index e1d197a9..2ed94700 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -690,8 +690,14 @@ func (v *View) DisplayView() { } // Now we actually draw the line - colN := 0 - for _, ch := range line { + colN := v.leftCol + screenX += v.leftCol + charNum = Loc{v.leftCol, charNum.Y} + for _, ch := range Sub(line, v.leftCol, v.leftCol+v.width) { + if screenX-v.leftCol > v.x+v.width { + break + } + lineStyle := defStyle if v.Buf.Settings["syntax"].(bool) {