diff options
Diffstat (limited to 'eventBindings.go')
| -rw-r--r-- | eventBindings.go | 106 |
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 } |
