diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2021-04-10 11:40:42 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2021-04-10 11:54:38 +1000 |
commit | e42e7e5cbd9d075ee24ae8f91ba9e12bdd42fafc (patch) | |
tree | 61d65a544c056b3bf0384cf6954b81b292eb4b07 /vendor | |
parent | 93fac1f3124f87009091230f61cc13b5e5473cb5 (diff) |
fix commit amend
Diffstat (limited to 'vendor')
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/gui.go | 44 | ||||
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/loader.go | 13 | ||||
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/tcell_driver.go | 6 | ||||
-rw-r--r-- | vendor/modules.txt | 2 |
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 |