Skip to content

Commit

Permalink
Cursor handling improvements
Browse files Browse the repository at this point in the history
- display cursor on text input
- avoid deleting titles with backspace
- menu selection with highlighted row
  • Loading branch information
kjoe committed Mar 2, 2019
1 parent 0738f4a commit 91d51a1
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 12 deletions.
15 changes: 11 additions & 4 deletions top/dialog.go
Expand Up @@ -70,16 +70,20 @@ func dialogOpen(d dialogType) func(g *gocui.Gui, v *gocui.View) error {

maxX, _ := g.Size()
// Open one-line editable view, print a propmt and set cursor after it.
if v, err := g.SetView("dialog", -1, 3, maxX-1, 5); err != nil {
if v, err := g.SetView("dialog", len(dialogPrompts[d])-1, 3, maxX-1, 5); err != nil {
if err != gocui.ErrUnknownView {
return fmt.Errorf("set dialog view on layout failed: %s", err)
}

p, err := g.View("cmdline")
if err != nil {
return fmt.Errorf("Set focus on cmdline view failed: %s", err)
}
fmt.Fprintf(p, dialogPrompts[d])

g.Cursor = true
v.Editable = true
v.Frame = false
fmt.Fprintf(v, dialogPrompts[d])

v.SetCursor(len(dialogPrompts[d]), 0)

if _, err := g.SetCurrentView("dialog"); err != nil {
return fmt.Errorf("set dialog view as current on layout failed: %s", err)
Expand All @@ -96,6 +100,9 @@ func dialogOpen(d dialogType) func(g *gocui.Gui, v *gocui.View) error {
func dialogFinish(g *gocui.Gui, v *gocui.View) error {
var answer string

g.Cursor = false
printCmdline(g, "")

switch dialog {
case dialogPgReload:
doReload(g, v, answer)
Expand Down
27 changes: 19 additions & 8 deletions top/menu.go
Expand Up @@ -62,6 +62,7 @@ var (

// Variable-transporter, function which check user's choice, uses this variable to select appropriate handler. Depending on menu type, select appropriate function.
menu menuType
items []string
)

// Open 'gocui' view object and display menu items depending on passed menu type.
Expand All @@ -73,8 +74,6 @@ func menuOpen(m menuStyle) func(g *gocui.Gui, _ *gocui.View) error {
return nil
}

g.Cursor = true

v, err := g.SetView("menu", 0, 5, 72, 6+len(m.menuItems))
if err != nil {
if err != gocui.ErrUnknownView {
Expand All @@ -86,11 +85,10 @@ func menuOpen(m menuStyle) func(g *gocui.Gui, _ *gocui.View) error {
return err
}

/* print menu items */
for _, item := range m.menuItems {
fmt.Fprintln(v, item)
}
menu = m.menuType
items = m.menuItems

menuDraw(v)

return nil
}
Expand Down Expand Up @@ -136,8 +134,6 @@ func menuSelect(g *gocui.Gui, v *gocui.View) error {

// Close 'gocui' view object when menu is closed
func menuClose(g *gocui.Gui, v *gocui.View) error {
g.Cursor = false

if err := g.DeleteView("menu"); err != nil {
return err
}
Expand All @@ -148,6 +144,19 @@ func menuClose(g *gocui.Gui, v *gocui.View) error {
return nil
}

func menuDraw(v *gocui.View) {
_, cy := v.Cursor()
v.Clear()
/* print menu items */
for i, item := range items {
if i == cy {
fmt.Fprintln(v, "\033[30;47m" + item + "\033[0m")
} else {
fmt.Fprintln(v, item)
}
}
}

// Move cursor to one item up or down.
func moveCursor(d direction) func(g *gocui.Gui, v *gocui.View) error {
return func(g *gocui.Gui, v *gocui.View) error {
Expand All @@ -156,8 +165,10 @@ func moveCursor(d direction) func(g *gocui.Gui, v *gocui.View) error {
switch d {
case moveDown:
v.SetCursor(cx, cy+1) /* errors don't make sense here */
menuDraw(v)
case moveUp:
v.SetCursor(cx, cy-1) /* errors don't make sense here */
menuDraw(v)
}
}
return nil
Expand Down

0 comments on commit 91d51a1

Please sign in to comment.