diff --git a/ui/guilds.go b/ui/guilds.go index ab70c23..9db29da 100644 --- a/ui/guilds.go +++ b/ui/guilds.go @@ -5,6 +5,7 @@ import ( "github.com/ayntgl/astatine" "github.com/ayntgl/discordo/discord" + "github.com/gdamore/tcell/v2" "github.com/rivo/tview" ) @@ -26,9 +27,31 @@ func NewGuildsList(app *App) *GuildsList { gl.SetBorder(true) gl.SetBorderPadding(0, 0, 1, 1) gl.SetSelectedFunc(gl.onSelected) + gl.SetInputCapture(gl.onInputCapture) return gl } +func (gl *GuildsList) onInputCapture(e *tcell.EventKey) *tcell.EventKey { + i := gl.List.GetCurrentItem() + switch e.Rune() { + case 'g': // Home. + i = 0 + case 'G': // End. + i = gl.List.GetItemCount() - 1 + case 'j': // Down. + i++ + case 'k': // Up. + i-- + if i < 0 { + i = 0 + } + default: + return e + } + gl.List.SetCurrentItem(i) + return nil +} + func (gl *GuildsList) onSelected(idx int, mainText string, secondaryText string, shortcut rune) { rootTreeNode := gl.app.ChannelsTreeView.GetRoot() rootTreeNode.ClearChildren()