Improve rendering performance by caching rune widths

Related: 8bead4a
This commit is contained in:
Junegunn Choi 2015-01-24 12:28:00 +09:00
parent a47c06cb61
commit 71a7b3a26f

View File

@ -62,6 +62,7 @@ func (a ByTimeOrder) Less(i, j int) bool {
} }
var _spinner = []string{`-`, `\`, `|`, `/`, `-`, `\`, `|`, `/`} var _spinner = []string{`-`, `\`, `|`, `/`, `-`, `\`, `|`, `/`}
var _runeWidths = make(map[rune]int)
const ( const (
reqPrompt util.EventType = iota reqPrompt util.EventType = iota
@ -176,8 +177,12 @@ func (t *Terminal) output() {
func runeWidth(r rune, prefixWidth int) int { func runeWidth(r rune, prefixWidth int) int {
if r == '\t' { if r == '\t' {
return 8 - prefixWidth%8 return 8 - prefixWidth%8
} else if w, found := _runeWidths[r]; found {
return w
} else { } else {
return runewidth.RuneWidth(r) w := runewidth.RuneWidth(r)
_runeWidths[r] = w
return w
} }
} }