summaryrefslogtreecommitdiffstats
path: root/vendor
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2021-04-10 11:40:42 +1000
committerJesse Duffield <jessedduffield@gmail.com>2021-04-10 11:54:38 +1000
commite42e7e5cbd9d075ee24ae8f91ba9e12bdd42fafc (patch)
tree61d65a544c056b3bf0384cf6954b81b292eb4b07 /vendor
parent93fac1f3124f87009091230f61cc13b5e5473cb5 (diff)
fix commit amend
Diffstat (limited to 'vendor')
-rw-r--r--vendor/github.com/jesseduffield/gocui/gui.go44
-rw-r--r--vendor/github.com/jesseduffield/gocui/loader.go13
-rw-r--r--vendor/github.com/jesseduffield/gocui/tcell_driver.go6
-rw-r--r--vendor/modules.txt2
4 files changed, 47 insertions, 18 deletions
diff --git a/vendor/github.com/jesseduffield/gocui/gui.go b/vendor/github.com/jesseduffield/gocui/gui.go
index c537a32b6..9b2d1ad25 100644
--- a/vendor/github.com/jesseduffield/gocui/gui.go
+++ b/vendor/github.com/jesseduffield/gocui/gui.go
@@ -13,6 +13,7 @@ import (
"sync"
"time"
+ "github.com/gdamore/tcell/v2"
"github.com/go-errors/errors"
)
@@ -158,6 +159,10 @@ type Gui struct {
SearchEscapeKey interface{}
NextSearchMatchKey interface{}
PrevSearchMatchKey interface{}
+
+ screen tcell.Screen
+ suspendedMutex sync.Mutex
+ suspended bool
}
// NewGui returns a new Gui object with a given output mode.
@@ -166,9 +171,9 @@ func NewGui(mode OutputMode, supportOverlaps bool, playMode PlayMode, headless b
var err error
if headless {
- err = tcellInitSimulation()
+ err = g.tcellInitSimulation()
} else {
- err = tcellInit()
+ err = g.tcellInit()
}
if err != nil {
return nil, err
@@ -1000,6 +1005,10 @@ func (g *Gui) drawListFooter(v *View, fgColor, bgColor Attribute) error {
// draw manages the cursor and calls the draw function of a view.
func (g *Gui) draw(v *View) error {
+ if g.suspended {
+ return nil
+ }
+
if g.Cursor {
if curview := g.currentView; curview != nil {
vMaxX, vMaxY := curview.Size()
@@ -1166,6 +1175,11 @@ func (g *Gui) StartTicking() {
for {
select {
case <-ticker.C:
+ // I'm okay with having a data race here: there's no harm in letting one of these updates through
+ if g.suspended {
+ continue outer
+ }
+
for _, view := range g.Views() {
if view.HasLoader {
g.userEvents <- userEvent{func(g *Gui) error { return nil }}
@@ -1290,3 +1304,29 @@ func (g *Gui) replayRecording() {
log.Fatal("gocui should have already exited")
}
+
+func (g *Gui) Suspend() error {
+ g.suspendedMutex.Lock()
+ defer g.suspendedMutex.Unlock()
+
+ if g.suspended {
+ return errors.New("Already suspended")
+ }
+
+ g.suspended = true
+
+ return g.screen.Suspend()
+}
+
+func (g *Gui) Resume() error {
+ g.suspendedMutex.Lock()
+ defer g.suspendedMutex.Unlock()
+
+ if !g.suspended {
+ return errors.New("Cannot resume because we are not suspended")
+ }
+
+ g.suspended = false
+
+ return g.screen.Resume()
+}
diff --git a/vendor/github.com/jesseduffield/gocui/loader.go b/vendor/github.com/jesseduffield/gocui/loader.go
index d6715ac6d..0aad5ae85 100644
--- a/vendor/github.com/jesseduffield/gocui/loader.go
+++ b/vendor/github.com/jesseduffield/gocui/loader.go
@@ -2,19 +2,6 @@ package gocui
import "time"
-func (g *Gui) loaderTick() {
- go func() {
- for range time.Tick(time.Millisecond * 50) {
- for _, view := range g.Views() {
- if view.HasLoader {
- g.userEvents <- userEvent{func(g *Gui) error { return nil }}
- break
- }
- }
- }
- }()
-}
-
func (v *View) loaderLines() [][]cell {
duplicate := make([][]cell, len(v.lines))
for i := range v.lines {
diff --git a/vendor/github.com/jesseduffield/gocui/tcell_driver.go b/vendor/github.com/jesseduffield/gocui/tcell_driver.go
index 3bc92b344..8d5045bce 100644
--- a/vendor/github.com/jesseduffield/gocui/tcell_driver.go
+++ b/vendor/github.com/jesseduffield/gocui/tcell_driver.go
@@ -21,23 +21,25 @@ type oldStyle struct {
}
// tcellInit initializes tcell screen for use.
-func tcellInit() error {
+func (g *Gui) tcellInit() error {
if s, e := tcell.NewScreen(); e != nil {
return e
} else if e = s.Init(); e != nil {
return e
} else {
+ g.screen = s
Screen = s
return nil
}
}
// tcellInitSimulation initializes tcell screen for use.
-func tcellInitSimulation() error {
+func (g *Gui) tcellInitSimulation() error {
s := tcell.NewSimulationScreen("")
if e := s.Init(); e != nil {
return e
} else {
+ g.screen = s
Screen = s
return nil
}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 6ee82a59c..7c98c9239 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -149,7 +149,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.20210409121040-210802112d8a
+# github.com/jesseduffield/gocui v0.3.1-0.20210410011117-a2bb4baca390
## explicit
github.com/jesseduffield/gocui
# github.com/jesseduffield/termbox-go v0.0.0-20200823212418-a2289ed6aafe