summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/jesseduffield/gocui/view.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jesseduffield/gocui/view.go')
-rw-r--r--vendor/github.com/jesseduffield/gocui/view.go21
1 files changed, 16 insertions, 5 deletions
diff --git a/vendor/github.com/jesseduffield/gocui/view.go b/vendor/github.com/jesseduffield/gocui/view.go
index c8f4507c9..f4b13cb2c 100644
--- a/vendor/github.com/jesseduffield/gocui/view.go
+++ b/vendor/github.com/jesseduffield/gocui/view.go
@@ -48,7 +48,12 @@ type View struct {
// tained is true if the viewLines must be updated
tainted bool
- // internal representation of the view's buffer
+ // internal representation of the view's buffer. We will keep viewLines around
+ // from a previous render until we explicitly set them to nil, allowing us to
+ // render the same content twice without flicker. Wherever we want to render
+ // something without any chance of old content appearing (e.g. when actually
+ // rendering new content or if the view is resized) we should set tainted to
+ // true and viewLines to nil
viewLines []viewLine
// writeMutex protects locks the write process
@@ -155,6 +160,14 @@ type View struct {
KeybindOnEdit bool
}
+// call this in the event of a view resize, or if you want to render new content
+// without the chance of old content still appearing, or if you want to remove
+// a line from the existing content
+func (v *View) clearViewLines() {
+ v.tainted = true
+ v.viewLines = nil
+}
+
type searcher struct {
searchString string
searchPositions []cellPos
@@ -651,9 +664,8 @@ func (v *View) Clear() {
defer v.writeMutex.Unlock()
v.rewind()
- v.tainted = true
v.lines = nil
- v.viewLines = nil
+ v.clearViewLines()
v.clearRunes()
}
@@ -683,8 +695,7 @@ func (v *View) FlushStaleCells() {
v.writeMutex.Lock()
defer v.writeMutex.Unlock()
- v.tainted = true
- v.viewLines = nil
+ v.clearViewLines()
}
func (v *View) rewind() {