diff options
Diffstat (limited to 'vendor')
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/escape.go | 37 | ||||
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/view.go | 34 | ||||
-rw-r--r-- | vendor/modules.txt | 2 |
3 files changed, 68 insertions, 5 deletions
diff --git a/vendor/github.com/jesseduffield/gocui/escape.go b/vendor/github.com/jesseduffield/gocui/escape.go index 540946117..c8bad21ad 100644 --- a/vendor/github.com/jesseduffield/gocui/escape.go +++ b/vendor/github.com/jesseduffield/gocui/escape.go @@ -16,6 +16,19 @@ type escapeInterpreter struct { csiParam []string curFgColor, curBgColor Attribute mode OutputMode + instruction instruction +} + +const ( + NONE = 1 << iota + ERASE_IN_LINE +) + +type instruction struct { + kind int + param1 int + param2 int + toWrite []rune } type escapeState int @@ -57,10 +70,11 @@ func (ei *escapeInterpreter) runes() []rune { // terminal escape sequences. func newEscapeInterpreter(mode OutputMode) *escapeInterpreter { ei := &escapeInterpreter{ - state: stateNone, - curFgColor: ColorDefault, - curBgColor: ColorDefault, - mode: mode, + state: stateNone, + curFgColor: ColorDefault, + curBgColor: ColorDefault, + mode: mode, + instruction: instruction{kind: NONE}, } return ei } @@ -73,6 +87,10 @@ func (ei *escapeInterpreter) reset() { ei.csiParam = nil } +func (ei *escapeInterpreter) instructionRead() { + ei.instruction.kind = NONE +} + // parseOne parses a rune. If isEscape is true, it means that the rune is part // of an escape sequence, and as such should not be printed verbatim. Otherwise, // it's not an escape sequence. @@ -134,6 +152,17 @@ func (ei *escapeInterpreter) parseOne(ch rune) (isEscape bool, err error) { ei.state = stateNone ei.csiParam = nil return true, nil + case ch == 'K': + p, err := strconv.Atoi(ei.csiParam[0]) + if err != nil { + return false, errCSIParseError + } + ei.instruction.kind = ERASE_IN_LINE + ei.instruction.param1 = p + + ei.state = stateNone + ei.csiParam = nil + return true, nil default: return false, errCSIParseError } diff --git a/vendor/github.com/jesseduffield/gocui/view.go b/vendor/github.com/jesseduffield/gocui/view.go index 89cb7ab28..3b83d4a0c 100644 --- a/vendor/github.com/jesseduffield/gocui/view.go +++ b/vendor/github.com/jesseduffield/gocui/view.go @@ -400,6 +400,15 @@ func (v *View) Write(p []byte) (n int, err error) { } default: cells := v.parseInput(ch) + if v.ei.instruction.kind != NONE { + switch v.ei.instruction.kind { + case ERASE_IN_LINE: + v.eraseInLine() + } + v.ei.instructionRead() + continue + } + if cells == nil { continue } @@ -416,6 +425,31 @@ func (v *View) Write(p []byte) (n int, err error) { return len(p), nil } +func (v *View) eraseInLine() { + code := v.ei.instruction.param1 + switch code { + case 0: + // need to write till end of the line with cells containing the same bg colour as we currently have. + + if len(v.lines) == 0 { + v.lines = append(v.lines, []cell{}) + } + nl := len(v.lines) + width, _ := v.Size() + cellCount := width - len(v.lines[nl-1]) + c := cell{ + fgColor: v.ei.curFgColor, + bgColor: v.ei.curBgColor, + chr: ' ', + } + for i := 0; i < cellCount; i++ { + v.lines[nl-1] = append(v.lines[nl-1], c) + } + default: + // don't recognise sequence. Until we merge the gocui master branch we can't handle going backwards. + } +} + // parseInput parses char by char the input written to the View. It returns nil // while processing ESC sequences. Otherwise, it returns a cell slice that // contains the processed data. diff --git a/vendor/modules.txt b/vendor/modules.txt index 052b13c27..5ecef1386 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -104,7 +104,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem github.com/jesseduffield/go-git/v5/utils/merkletrie/index github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame github.com/jesseduffield/go-git/v5/utils/merkletrie/noder -# github.com/jesseduffield/gocui v0.3.1-0.20201007110350-cc51e317126e +# github.com/jesseduffield/gocui v0.3.1-0.20201010224802-8a6768078fd7 ## explicit github.com/jesseduffield/gocui # github.com/jesseduffield/termbox-go v0.0.0-20200823212418-a2289ed6aafe |