summaryrefslogtreecommitdiffstats
path: root/pkg/gui/gui.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/gui/gui.go')
-rw-r--r--pkg/gui/gui.go24
1 files changed, 24 insertions, 0 deletions
diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go
index f35a4811f..8c455d369 100644
--- a/pkg/gui/gui.go
+++ b/pkg/gui/gui.go
@@ -5,6 +5,9 @@ import (
// "io"
// "io/ioutil"
+ "errors"
+ "log"
+ "os/exec"
"runtime"
"strings"
"time"
@@ -19,6 +22,13 @@ import (
// OverlappingEdges determines if panel edges overlap
var OverlappingEdges = false
+// ErrSubprocess tells us we're switching to a subprocess so we need to
+// close the Gui until it is finished
+var (
+ ErrSubprocess = errors.New("running subprocess")
+ subprocess *exec.Cmd
+)
+
type stateType struct {
GitFiles []git.File
Branches []git.Branch
@@ -273,6 +283,20 @@ func resizePopupPanels(g *gocui.Gui) error {
return nil
}
+func RunWithSubprocesses() {
+ for {
+ if err := run(); err != nil {
+ if err == gocui.ErrQuit {
+ break
+ } else if err == ErrSubprocess {
+ subprocess.Run()
+ } else {
+ log.Panicln(err)
+ }
+ }
+ }
+}
+
func run() (err error) {
g, err := gocui.NewGui(gocui.OutputNormal, OverlappingEdges)
if err != nil {