summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go42
1 files changed, 39 insertions, 3 deletions
diff --git a/main.go b/main.go
index 1e8f9a8..4d4dde4 100644
--- a/main.go
+++ b/main.go
@@ -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)
+ }
+}