diff --git a/Gopkg.lock b/Gopkg.lock index 0a050a548..277c69b8c 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -197,11 +197,11 @@ [[projects]] branch = "master" - digest = "1:b44cde97053119000e1295929118f935a59787e41c1b4b7db8e7bfdb11db5be1" + digest = "1:31a87f65dc451471f411d04742d2cb5ab79a699b8c73666b8fc29f47a8f43f7e" name = "github.com/jesseduffield/gocui" packages = ["."] pruneopts = "NUT" - revision = "e70eea43593b15d0f70e802771b871c08dacd5ee" + revision = "b502ee11d6743144c86226ca0366adaed727214d" [[projects]] branch = "master" diff --git a/vendor/github.com/jesseduffield/gocui/gui.go b/vendor/github.com/jesseduffield/gocui/gui.go index 41599a9be..1dcb237b7 100644 --- a/vendor/github.com/jesseduffield/gocui/gui.go +++ b/vendor/github.com/jesseduffield/gocui/gui.go @@ -49,6 +49,7 @@ type Gui struct { keybindings []*keybinding maxX, maxY int outputMode OutputMode + stop chan struct{} // BgColor and FgColor allow to configure the background and foreground // colors of the GUI. @@ -92,6 +93,8 @@ func NewGui(mode OutputMode, supportOverlaps bool) (*Gui, error) { g.outputMode = mode termbox.SetOutputMode(termbox.OutputMode(mode)) + g.stop = make(chan struct{}, 0) + g.tbEvents = make(chan termbox.Event, 20) g.userEvents = make(chan userEvent, 20) @@ -110,6 +113,9 @@ func NewGui(mode OutputMode, supportOverlaps bool) (*Gui, error) { // Close finalizes the library. It should be called after a successful // initialization and when gocui is not needed anymore. func (g *Gui) Close() { + go func() { + g.stop <- struct{}{} + }() termbox.Close() } @@ -371,9 +377,15 @@ func (g *Gui) MainLoop() error { if err := g.flush(); err != nil { return err } + go func() { for { - g.tbEvents <- termbox.PollEvent() + select { + case <-g.stop: + return + default: + g.tbEvents <- termbox.PollEvent() + } } }()