mirror of https://github.com/jroimartin/gocui.git
Simplify demo2. Add Gui.CurrentView(). Fix keybindings
This commit is contained in:
parent
7cc82f809e
commit
46b1452e71
154
_demos/demo2.go
154
_demos/demo2.go
|
@ -12,24 +12,12 @@ import (
|
||||||
"github.com/jroimartin/gocui"
|
"github.com/jroimartin/gocui"
|
||||||
)
|
)
|
||||||
|
|
||||||
func focusMain(g *gocui.Gui, v *gocui.View) error {
|
func nextView(g *gocui.Gui, v *gocui.View) error {
|
||||||
return g.SetCurrentView("main")
|
currentView := g.CurrentView()
|
||||||
}
|
if currentView == nil || currentView.Name() == "side" {
|
||||||
|
return g.SetCurrentView("main")
|
||||||
func focusSide(g *gocui.Gui, v *gocui.View) error {
|
}
|
||||||
return g.SetCurrentView("side")
|
return g.SetCurrentView("side")
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func focusCmdLine(g *gocui.Gui, v *gocui.View) error {
|
|
||||||
return g.SetCurrentView("cmdline")
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func showHideCursor(g *gocui.Gui, v *gocui.View) error {
|
|
||||||
g.ShowCursor = !g.ShowCursor
|
|
||||||
return nil
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func cursorDown(g *gocui.Gui, v *gocui.View) error {
|
func cursorDown(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
@ -84,49 +72,6 @@ func cursorRight(g *gocui.Gui, v *gocui.View) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func clear(g *gocui.Gui, v *gocui.View) error {
|
|
||||||
if v != nil {
|
|
||||||
v.Clear()
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func writeTest(g *gocui.Gui, v *gocui.View) error {
|
|
||||||
if v != nil {
|
|
||||||
fmt.Fprintln(v, "This is a test")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func showMsg(g *gocui.Gui, v *gocui.View) error {
|
|
||||||
maxX, maxY := g.Size()
|
|
||||||
if v, err := g.SetView("msg", maxX/2-10, maxY/2-10, maxX/2+10, maxY/2+10); err != nil {
|
|
||||||
if err != gocui.ErrorUnkView {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
fmt.Fprintln(v, "This is a message")
|
|
||||||
}
|
|
||||||
if err := g.SetCurrentView("msg"); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func delMsg(g *gocui.Gui, v *gocui.View) error {
|
|
||||||
g.DeleteView("msg")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setLayout1(g *gocui.Gui, v *gocui.View) error {
|
|
||||||
g.SetLayout(layout)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setLayout2(g *gocui.Gui, v *gocui.View) error {
|
|
||||||
g.SetLayout(layout2)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getLine(g *gocui.Gui, v *gocui.View) error {
|
func getLine(g *gocui.Gui, v *gocui.View) error {
|
||||||
var l string
|
var l string
|
||||||
var err error
|
var err error
|
||||||
|
@ -142,40 +87,32 @@ func getLine(g *gocui.Gui, v *gocui.View) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Fprintln(v, l)
|
fmt.Fprintln(v, l)
|
||||||
|
if err := g.SetCurrentView("msg"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getWord(g *gocui.Gui, v *gocui.View) error {
|
func delMsg(g *gocui.Gui, v *gocui.View) error {
|
||||||
var w string
|
if err := g.DeleteView("msg"); err != nil {
|
||||||
var err error
|
|
||||||
|
|
||||||
cx, cy := v.Cursor()
|
|
||||||
if w, err = v.Word(cx, cy); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := g.SetCurrentView("side"); err != nil {
|
||||||
maxX, maxY := g.Size()
|
return err
|
||||||
if v, err := g.SetView("msg", maxX/2-30, maxY/2, maxX/2+30, maxY/2+2); err != nil {
|
|
||||||
if err != gocui.ErrorUnkView {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
fmt.Fprintf(v, "\"%s\"", w)
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func quit(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
return gocui.ErrorQuit
|
||||||
|
}
|
||||||
|
|
||||||
func keybindings(g *gocui.Gui) error {
|
func keybindings(g *gocui.Gui) error {
|
||||||
if err := g.SetKeybinding("", gocui.KeyCtrlSpace, 0, focusMain); err != nil {
|
if err := g.SetKeybinding("side", gocui.KeyCtrlSpace, 0, nextView); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := g.SetKeybinding("", gocui.KeyCtrlS, 0, focusSide); err != nil {
|
if err := g.SetKeybinding("main", gocui.KeyCtrlSpace, 0, nextView); err != nil {
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := g.SetKeybinding("", gocui.KeyCtrlL, 0, focusCmdLine); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := g.SetKeybinding("", 'c', gocui.ModAlt, showHideCursor); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := g.SetKeybinding("", gocui.KeyArrowDown, 0, cursorDown); err != nil {
|
if err := g.SetKeybinding("", gocui.KeyArrowDown, 0, cursorDown); err != nil {
|
||||||
|
@ -193,44 +130,19 @@ func keybindings(g *gocui.Gui) error {
|
||||||
if err := g.SetKeybinding("", gocui.KeyCtrlC, 0, quit); err != nil {
|
if err := g.SetKeybinding("", gocui.KeyCtrlC, 0, quit); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := g.SetKeybinding("main", 'q', 0, quit); err != nil {
|
if err := g.SetKeybinding("side", gocui.KeyEnter, 0, getLine); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := g.SetKeybinding("", 'c', 0, clear); err != nil {
|
if err := g.SetKeybinding("msg", gocui.KeyEnter, 0, delMsg); err != nil {
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := g.SetKeybinding("", 't', 0, writeTest); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := g.SetKeybinding("", '1', 0, setLayout1); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := g.SetKeybinding("", '2', 0, setLayout2); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := g.SetKeybinding("", '3', 0, showMsg); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := g.SetKeybinding("", '4', 0, delMsg); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := g.SetKeybinding("", '9', 0, getWord); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := g.SetKeybinding("", '0', 0, getLine); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func quit(g *gocui.Gui, v *gocui.View) error {
|
|
||||||
return gocui.ErrorQuit
|
|
||||||
}
|
|
||||||
|
|
||||||
func layout(g *gocui.Gui) error {
|
func layout(g *gocui.Gui) error {
|
||||||
maxX, maxY := g.Size()
|
maxX, maxY := g.Size()
|
||||||
if v, err := g.SetView("side", -1, -1, 30, maxY-5); err != nil {
|
if v, err := g.SetView("side", -1, -1, 30, maxY); err != nil {
|
||||||
if err != gocui.ErrorUnkView {
|
if err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -240,7 +152,7 @@ func layout(g *gocui.Gui) error {
|
||||||
fmt.Fprintln(v, "Item 3")
|
fmt.Fprintln(v, "Item 3")
|
||||||
fmt.Fprintln(v, "Item 4")
|
fmt.Fprintln(v, "Item 4")
|
||||||
}
|
}
|
||||||
if v, err := g.SetView("main", 30, -1, maxX, maxY-5); err != nil {
|
if v, err := g.SetView("main", 30, -1, maxX, maxY); err != nil {
|
||||||
if err != gocui.ErrorUnkView {
|
if err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -249,28 +161,8 @@ func layout(g *gocui.Gui) error {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
fmt.Fprintf(v, "%s", b)
|
fmt.Fprintf(v, "%s", b)
|
||||||
if err := g.SetCurrentView("main"); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if v, err := g.SetView("cmdline", -1, maxY-5, maxX, maxY); err != nil {
|
|
||||||
if err != gocui.ErrorUnkView {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
v.Editable = true
|
v.Editable = true
|
||||||
fmt.Fprintln(v, "Command line test")
|
if err := g.SetCurrentView("main"); err != nil {
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func layout2(g *gocui.Gui) error {
|
|
||||||
maxX, maxY := g.Size()
|
|
||||||
if v, err := g.SetView("center", maxX/2-10, maxY/2-10, maxX/2+10, maxY/2+10); err != nil {
|
|
||||||
if err != gocui.ErrorUnkView {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
fmt.Fprintln(v, "Center view test")
|
|
||||||
if err := g.SetCurrentView("center"); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
10
gui.go
10
gui.go
|
@ -151,6 +151,12 @@ func (g *Gui) SetCurrentView(name string) error {
|
||||||
return ErrorUnkView
|
return ErrorUnkView
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Current View returns the currently focused view, or nil if no view
|
||||||
|
// owns the focus.
|
||||||
|
func (g *Gui) CurrentView() *View {
|
||||||
|
return g.currentView
|
||||||
|
}
|
||||||
|
|
||||||
// SetKeybinding creates a new keybinding. If viewname equals to ""
|
// SetKeybinding creates a new keybinding. If viewname equals to ""
|
||||||
// (empty string) then the keybinding will apply to all views. key must
|
// (empty string) then the keybinding will apply to all views. key must
|
||||||
// be a rune or a Key.
|
// be a rune or a Key.
|
||||||
|
@ -423,9 +429,7 @@ func (g *Gui) onKey(ev *termbox.Event) error {
|
||||||
for _, kb := range g.keybindings {
|
for _, kb := range g.keybindings {
|
||||||
if kb.h != nil && ev.Ch == kb.ch && Key(ev.Key) == kb.key && Modifier(ev.Mod) == kb.mod &&
|
if kb.h != nil && ev.Ch == kb.ch && Key(ev.Key) == kb.key && Modifier(ev.Mod) == kb.mod &&
|
||||||
(kb.viewName == "" || (g.currentView != nil && kb.viewName == g.currentView.name)) {
|
(kb.viewName == "" || (g.currentView != nil && kb.viewName == g.currentView.name)) {
|
||||||
if err := kb.h(g, g.currentView); err != nil {
|
return kb.h(g, g.currentView)
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in New Issue