keys.go

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