Improve performance for very long lines
This commit is contained in:
parent
922baa930d
commit
d5694c0f35
3 changed files with 23 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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 ""
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue