summaryrefslogtreecommitdiff
path: root/eventBindings.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-01-31 16:05:34 -0600
committerJeff Carr <[email protected]>2025-01-31 22:08:21 -0600
commitbac14a675bb0cf284809ff31db98f4a3799fe1f6 (patch)
treefb8ca54f5b8fcf949fa6b57c417fc23cd5f2254e /eventBindings.go
parentb7cd6d07fcaa69d009b3f33f7c59afb16b719029 (diff)
lots of work to clean up my old code
Diffstat (limited to 'eventBindings.go')
-rw-r--r--eventBindings.go106
1 files changed, 94 insertions, 12 deletions
diff --git a/eventBindings.go b/eventBindings.go
index c18ffdf..5c0a599 100644
--- a/eventBindings.go
+++ b/eventBindings.go
@@ -5,45 +5,114 @@ package main
import (
"fmt"
+ "syscall"
"github.com/awesome-gocui/gocui"
- log "go.wit.com/log"
+ "go.wit.com/log"
)
-// tells 'gocui' what to call based on what key was pressed
+// THIS IS A STANDARD.
+
+// register how the 'gocui' will work as a GO toolkit plugin
+// all applications will use these keys. they are universal.
+
+// tells 'gocui' where to send events
func registerHandlers(g *gocui.Gui) {
- g.SetKeybinding("", '?', gocui.ModNone, theHelp) // 'h' toggles on and off the help menu
- g.SetKeybinding("", 'r', gocui.ModNone, widgetRefresh) // screen refresh
- g.SetKeybinding("", 'w', gocui.ModNone, doWindow) // close all windows
- g.SetKeybinding("", 'q', gocui.ModNone, doExit) // exit
- g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, doExit) // exit
- g.SetKeybinding("", gocui.KeyCtrlV, gocui.ModNone, doPanic) // forced panic
+ keyForced, modForced := gocui.MustParse("ctrl+z") // setup ctrl+z
+
+ // mouse handlers
+ g.SetKeybinding("", gocui.MouseLeft, gocui.ModNone, mouseDown) // normal left mouse down
+ g.SetKeybinding("", gocui.MouseLeft, gocui.ModMouseCtrl, ctrlDown) // mouse with the ctrl key held down
+ g.SetKeybinding("", gocui.MouseRelease, gocui.ModNone, mouseUp) // mouse button release
+
+ // Ctrl key handlers
+ g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, doExit) // CTRL-C : exits the application
+ g.SetKeybinding("", gocui.KeyCtrlV, gocui.ModNone, doPanic) // CTRL-V : force a panic()
+ g.SetKeybinding("", gocui.KeyCtrlD, gocui.ModNone, openDebuggger) // CTRL-D : open the (D)ebugger
+ g.SetKeybinding("", keyForced, modForced, handle_ctrl_z) // CTRL-Z :cleverly let's you background gocui (breaks cursor mouse on return)
+
+ // regular keys
+ g.SetKeybinding("", '?', gocui.ModNone, theHelp) // '?' toggles on and off the help menu
+ g.SetKeybinding("", 'w', gocui.ModNone, doWindow) // 'w' close all windows
+ g.SetKeybinding("", 'r', gocui.ModNone, widgetRefresh) // 'r' screen refresh
+ g.SetKeybinding("", 'q', gocui.ModNone, doExit) // 'q' exit
// debugging
- g.SetKeybinding("", 'd', gocui.ModNone, theLetterD) // 'd' toggles on and off debugging buttons
- g.SetKeybinding("", gocui.KeyCtrlD, gocui.ModNone, openDebuggger) // open the debugger
- g.SetKeybinding("", 'L', gocui.ModNone, dumpWidgets) // list all widgets
- g.SetKeybinding("", 'M', gocui.ModNone, dumpWidgetPlacement) // list all widgets with positions
+ g.SetKeybinding("", 'f', gocui.ModNone, theFind) // 'f' shows what is under your mouse
+ g.SetKeybinding("", 'S', gocui.ModNone, setSuperMouse) // 'S' Super Mouse mode!
+ g.SetKeybinding("", 'h', gocui.ModNone, theHide) // 'h' hide all widgets
+ g.SetKeybinding("", 'M', gocui.ModNone, dumpWidgetPlacement) // 'M' list all widgets with positions
+ g.SetKeybinding("", 'L', gocui.ModNone, dumpWidgets) // 'L' list all widgets in tree view
+ g.SetKeybinding("", 'd', gocui.ModNone, theLetterD) // 'd' toggles on and off debugging buttons
+ g.SetKeybinding("", 'q', gocui.ModNone, quit) // 'q' only exits gocui. plugin stays alive (?)
+}
+
+// flips on 'super mouse' mode
+// while this is turned on, it will print out every widget found under the mouse
+func setSuperMouse(g *gocui.Gui, v *gocui.View) error {
+ if me.supermouse {
+ log.Log(GOCUI, "supermouse off")
+ me.supermouse = false
+ } else {
+ me.supermouse = true
+ log.Log(GOCUI, "supermouse on")
+ }
+ return nil
+}
+func theHide(g *gocui.Gui, v *gocui.View) error {
+ var w *guiWidget
+ w = me.treeRoot.TK.(*guiWidget)
+ w.hideWidgets()
+ return nil
+}
+
+func theShow(g *gocui.Gui, v *gocui.View) error {
+ var w *guiWidget
+ w = me.treeRoot.TK.(*guiWidget)
+ w.showWidgets()
+ return nil
}
func doExit(g *gocui.Gui, v *gocui.View) error {
+ standardExit()
return nil
}
func doPanic(g *gocui.Gui, v *gocui.View) error {
+ log.Log(GOCUI, "do panic() here")
+ standardClose()
+ panic("forced panic in gocui")
return nil
}
func dumpWidgets(g *gocui.Gui, v *gocui.View) error {
+ me.treeRoot.ListWidgets()
+
+ tk := me.logStdout.TK.(*guiWidget)
+ // msg := fmt.Sprintf("test out kb %d\n", ecount)
+ // tk.Write([]byte(msg))
+ if tk == nil {
+ log.Log(ERROR, "tk = nil")
+ }
+ if tk.v == nil {
+ log.Log(ERROR, "tk.v = nil")
+ } else {
+ log.Log(ERROR, "setting log.CaptureMode(tk.v)")
+ log.Log(ERROR, "setting log.CaptureMode(tk.v)")
+ log.CaptureMode(tk)
+ }
return nil
}
func dumpWidgetPlacement(g *gocui.Gui, v *gocui.View) error {
+ w := me.treeRoot.TK.(*guiWidget)
+ w.dumpTree("MM")
return nil
}
func openDebuggger(g *gocui.Gui, v *gocui.View) error {
+ me.myTree.SendEnableDebugger()
return nil
}
@@ -93,9 +162,22 @@ func theHelp(g *gocui.Gui, v *gocui.View) error {
}
func widgetRefresh(g *gocui.Gui, v *gocui.View) error {
+ log.Log(GOCUI, "todo: refresh windows here")
return nil
}
func doWindow(g *gocui.Gui, v *gocui.View) error {
+ log.Log(GOCUI, "todo: close all windows here")
+ return nil
+}
+
+// todo: find and give credit to the person that I found this patch in their forked repo
+// handle ctrl+z
+func handle_ctrl_z(g *gocui.Gui, v *gocui.View) error {
+ gocui.Suspend()
+ log.Info("got ctrl+z")
+ syscall.Kill(syscall.Getpid(), syscall.SIGSTOP)
+ log.Info("got ctrl+z syscall() done")
+ gocui.Resume()
return nil
}