diff options
Diffstat (limited to 'vendor/github.com/jesseduffield/gocui/escape.go')
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/escape.go | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/vendor/github.com/jesseduffield/gocui/escape.go b/vendor/github.com/jesseduffield/gocui/escape.go index c88309b07..c09003e31 100644 --- a/vendor/github.com/jesseduffield/gocui/escape.go +++ b/vendor/github.com/jesseduffield/gocui/escape.go @@ -5,8 +5,10 @@ package gocui import ( - "github.com/go-errors/errors" "strconv" + "sync" + + "github.com/go-errors/errors" ) type escapeInterpreter struct { @@ -15,6 +17,7 @@ type escapeInterpreter struct { csiParam []string curFgColor, curBgColor Attribute mode OutputMode + mutex sync.Mutex } type escapeState int @@ -34,6 +37,9 @@ var ( // runes in case of error will output the non-parsed runes as a string. func (ei *escapeInterpreter) runes() []rune { + ei.mutex.Lock() + defer ei.mutex.Unlock() + switch ei.state { case stateNone: return []rune{0x1b} @@ -66,6 +72,9 @@ func newEscapeInterpreter(mode OutputMode) *escapeInterpreter { // reset sets the escapeInterpreter in initial state. func (ei *escapeInterpreter) reset() { + ei.mutex.Lock() + defer ei.mutex.Unlock() + ei.state = stateNone ei.curFgColor = ColorDefault ei.curBgColor = ColorDefault @@ -76,6 +85,9 @@ func (ei *escapeInterpreter) reset() { // of an escape sequence, and as such should not be printed verbatim. Otherwise, // it's not an escape sequence. func (ei *escapeInterpreter) parseOne(ch rune) (isEscape bool, err error) { + ei.mutex.Lock() + defer ei.mutex.Unlock() + // Sanity checks if len(ei.csiParam) > 20 { return false, errCSITooLong @@ -179,6 +191,9 @@ func (ei *escapeInterpreter) outputNormal() error { // 0x11 - 0xe8: 216 different colors // 0xe9 - 0x1ff: 24 different shades of grey func (ei *escapeInterpreter) output256() error { + ei.mutex.Lock() + defer ei.mutex.Unlock() + if len(ei.csiParam) < 3 { return ei.outputNormal() } |