keys.go

  1package commands
  2
  3import (
  4	"github.com/charmbracelet/bubbles/v2/key"
  5	"github.com/opencode-ai/opencode/internal/tui/layout"
  6)
  7
  8type CommandsDialogKeyMap struct {
  9	Select   key.Binding
 10	Next     key.Binding
 11	Previous key.Binding
 12	Tab      key.Binding
 13}
 14
 15func DefaultCommandsDialogKeyMap() CommandsDialogKeyMap {
 16	return CommandsDialogKeyMap{
 17		Select: key.NewBinding(
 18			key.WithKeys("enter", "ctrl+y"),
 19			key.WithHelp("enter", "confirm"),
 20		),
 21		Next: key.NewBinding(
 22			key.WithKeys("down", "ctrl+n"),
 23			key.WithHelp("↓", "next item"),
 24		),
 25		Previous: key.NewBinding(
 26			key.WithKeys("up", "ctrl+p"),
 27			key.WithHelp("↑", "previous item"),
 28		),
 29		Tab: key.NewBinding(
 30			key.WithKeys("tab"),
 31			key.WithHelp("tab", "switch selection"),
 32		),
 33	}
 34}
 35
 36// FullHelp implements help.KeyMap.
 37func (k CommandsDialogKeyMap) FullHelp() [][]key.Binding {
 38	m := [][]key.Binding{}
 39	slice := layout.KeyMapToSlice(k)
 40	for i := 0; i < len(slice); i += 4 {
 41		end := min(i+4, len(slice))
 42		m = append(m, slice[i:end])
 43	}
 44	return m
 45}
 46
 47// ShortHelp implements help.KeyMap.
 48func (k CommandsDialogKeyMap) ShortHelp() []key.Binding {
 49	return []key.Binding{
 50		k.Tab,
 51		key.NewBinding(
 52			key.WithKeys("down", "up"),
 53			key.WithHelp("↑↓", "choose"),
 54		),
 55		k.Select,
 56		key.NewBinding(
 57			key.WithKeys("esc"),
 58			key.WithHelp("esc", "cancel"),
 59		),
 60	}
 61}
 62
 63type ArgumentsDialogKeyMap struct {
 64	Confirm  key.Binding
 65	Next     key.Binding
 66	Previous key.Binding
 67}
 68
 69func DefaultArgumentsDialogKeyMap() ArgumentsDialogKeyMap {
 70	return ArgumentsDialogKeyMap{
 71		Confirm: key.NewBinding(
 72			key.WithKeys("enter"),
 73			key.WithHelp("enter", "confirm"),
 74		),
 75
 76		Next: key.NewBinding(
 77			key.WithKeys("tab", "down"),
 78			key.WithHelp("tab/↓", "next"),
 79		),
 80		Previous: key.NewBinding(
 81			key.WithKeys("shift+tab", "up"),
 82			key.WithHelp("shift+tab/↑", "previous"),
 83		),
 84	}
 85}
 86
 87// FullHelp implements help.KeyMap.
 88func (k ArgumentsDialogKeyMap) FullHelp() [][]key.Binding {
 89	m := [][]key.Binding{}
 90	slice := layout.KeyMapToSlice(k)
 91	for i := 0; i < len(slice); i += 4 {
 92		end := min(i+4, len(slice))
 93		m = append(m, slice[i:end])
 94	}
 95	return m
 96}
 97
 98// ShortHelp implements help.KeyMap.
 99func (k ArgumentsDialogKeyMap) ShortHelp() []key.Binding {
100	return []key.Binding{
101		k.Confirm,
102		k.Next,
103		k.Previous,
104	}
105}