Improve performance for very long lines

This commit is contained in:
Zachary Yedidia 2016-09-10 10:03:51 -04:00
parent 922baa930d
commit d5694c0f35
3 changed files with 23 additions and 2 deletions

View file

@ -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

View file

@ -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 ""
}

View file

@ -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) {