diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 42 |
1 files changed, 39 insertions, 3 deletions
@@ -5,9 +5,11 @@ package main import ( + "errors" "os" "runtime/debug" + "github.com/awesome-gocui/gocui" "go.wit.com/log" "go.wit.com/toolkits/tree" ) @@ -75,14 +77,19 @@ func mainGogui() { log.Warn("YAHOOOO Recovered in guiMain application:", r) log.Warn("Recovered from panic:", r) me.baseGui.Close() - log.Sleep(3) + + // allow gocui to close if possible, then print stack + log.Sleep(1) os.Stdout = origStdout os.Stderr = origStderr - me.myTree.SendToolkitPanic() log.Warn("Stack trace:") debug.PrintStack() - panic("BUMMER") + + // attempt to switch to the nocui toolkit + log.Sleep(1) + me.myTree.SendToolkitLoad("nocui") + // panic("BUMMER") return } }() @@ -106,3 +113,32 @@ func mainGogui() { os.Stderr = ferr gocuiMain() } + +// This initializes the gocui package +// it runs SetManagerFunc which passes every input +// event (keyboard, mouse, etc) to the function "gocuiEvent()" +func gocuiMain() { + g, err := gocui.NewGui(gocui.OutputNormal, true) + if err != nil { + panic(err) + } + defer g.Close() + + me.baseGui = g + + g.Cursor = true + g.Mouse = true + + // this sets the function that is run on every event. For example: + // When you click the mouse, move the mouse, or press a key on the keyboard + // This is equivalent to xev or similar to cat /dev/input on linux + g.SetManagerFunc(gocuiEvent) + + if err := defaultKeybindings(g); err != nil { + panic(err) + } + + if err := g.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) { + panic(err) + } +} |
