From dddef229dcab1cd2c5ab7101dc5a4781478c0a62 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Thu, 1 Feb 2024 21:47:31 -0600 Subject: dropdown & combobox's pop up Signed-off-by: Jeff Carr --- main.go | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) (limited to 'main.go') 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) + } +} -- cgit v1.2.3