mirror of
https://github.com/jroimartin/gocui.git
synced 2025-04-24 13:48:51 +08:00
Implement View.SetCursor()
This commit is contained in:
parent
e9c0f38143
commit
82ad9fa4ba
@ -40,6 +40,34 @@ func showHideCursor(g *gocui.Gui, v *gocui.View) error {
|
||||
|
||||
}
|
||||
|
||||
func cursorDown(g *gocui.Gui, v *gocui.View) error {
|
||||
if v != nil {
|
||||
v.SetCursor(v.CX, v.CY+1)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func cursorUp(g *gocui.Gui, v *gocui.View) error {
|
||||
if v != nil {
|
||||
v.SetCursor(v.CX, v.CY-1)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func cursorLeft(g *gocui.Gui, v *gocui.View) error {
|
||||
if v != nil {
|
||||
v.SetCursor(v.CX-1, v.CY)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func cursorRight(g *gocui.Gui, v *gocui.View) error {
|
||||
if v != nil {
|
||||
v.SetCursor(v.CX+1, v.CY)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func keybindings(g *gocui.Gui) error {
|
||||
if err := g.SetKeybinding("", gocui.KeyCtrlM, 0, focusMain); err != nil {
|
||||
return err
|
||||
@ -50,15 +78,28 @@ func keybindings(g *gocui.Gui) error {
|
||||
if err := g.SetKeybinding("", gocui.KeyCtrlL, 0, focusCmdLine); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("", gocui.KeyCtrlC, 0, quit); err != nil {
|
||||
if err := g.SetKeybinding("", 'c', gocui.ModAlt, showHideCursor); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("", 'c', gocui.ModAlt, showHideCursor); err != nil {
|
||||
if err := g.SetKeybinding("", 'j', 0, cursorDown); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("", 'k', 0, cursorUp); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("", 'h', 0, cursorLeft); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("", 'l', 0, cursorRight); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("main", gocui.KeyCtrlC, 0, quit); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("main", 'q', 0, quit); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
2
gui.go
2
gui.go
@ -348,7 +348,7 @@ func (g *Gui) onKey(ev *termbox.Event) (err error) {
|
||||
for _, kb := range g.keybindings {
|
||||
if ev.Ch == kb.Ch && Key(ev.Key) == kb.Key && Modifier(ev.Mod) == kb.Mod &&
|
||||
(kb.ViewName == "" || (g.CurrentView != nil && kb.ViewName == g.CurrentView.Name)) {
|
||||
if err := kb.CB(g, nil); err != nil {
|
||||
if err := kb.CB(g, g.CurrentView); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
14
view.go
14
view.go
@ -1,6 +1,7 @@
|
||||
package gocui
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/nsf/termbox-go"
|
||||
)
|
||||
|
||||
@ -26,3 +27,16 @@ func NewView(name string, x0, y0, x1, y1 int) (v *View) {
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
func (v *View) SetCursor(x, y int) (err error) {
|
||||
if x < 0 || v.X0+x+1 >= v.X1 || y < 0 || v.Y0+y+1 >= v.Y1 {
|
||||
return errors.New("invalid point")
|
||||
}
|
||||
v.CX = x
|
||||
v.CY = y
|
||||
return nil
|
||||
}
|
||||
|
||||
func (v *View) Write(p []byte) (n int, err error) {
|
||||
return 0, nil
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user