keys.go

  1package commands
  2
  3import (
  4	"github.com/charmbracelet/bubbles/v2/key"
  5)
  6
  7type CommandsDialogKeyMap struct {
  8	Select,
  9	Next,
 10	Previous,
 11	Tab,
 12	Close 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		Close: key.NewBinding(
 34			key.WithKeys("esc", "alt+esc"),
 35			key.WithHelp("esc", "cancel"),
 36		),
 37	}
 38}
 39
 40// KeyBindings implements layout.KeyMapProvider
 41func (k CommandsDialogKeyMap) KeyBindings() []key.Binding {
 42	return []key.Binding{
 43		k.Select,
 44		k.Next,
 45		k.Previous,
 46		k.Tab,
 47		k.Close,
 48	}
 49}
 50
 51// FullHelp implements help.KeyMap.
 52func (k CommandsDialogKeyMap) FullHelp() [][]key.Binding {
 53	m := [][]key.Binding{}
 54	slice := k.KeyBindings()
 55	for i := 0; i < len(slice); i += 4 {
 56		end := min(i+4, len(slice))
 57		m = append(m, slice[i:end])
 58	}
 59	return m
 60}
 61
 62// ShortHelp implements help.KeyMap.
 63func (k CommandsDialogKeyMap) ShortHelp() []key.Binding {
 64	return []key.Binding{
 65		k.Tab,
 66		key.NewBinding(
 67			key.WithKeys("down", "up"),
 68			key.WithHelp("↑↓", "choose"),
 69		),
 70		k.Select,
 71		k.Close,
 72	}
 73}
 74
 75type ArgumentsDialogKeyMap struct {
 76	Confirm  key.Binding
 77	Next     key.Binding
 78	Previous key.Binding
 79	Paste    key.Binding
 80	Close    key.Binding
 81}
 82
 83func DefaultArgumentsDialogKeyMap() ArgumentsDialogKeyMap {
 84	return ArgumentsDialogKeyMap{
 85		Confirm: key.NewBinding(
 86			key.WithKeys("enter"),
 87			key.WithHelp("enter", "confirm"),
 88		),
 89
 90		Next: key.NewBinding(
 91			key.WithKeys("tab", "down"),
 92			key.WithHelp("tab/↓", "next"),
 93		),
 94		Previous: key.NewBinding(
 95			key.WithKeys("shift+tab", "up"),
 96			key.WithHelp("shift+tab/↑", "previous"),
 97		),
 98		Paste: key.NewBinding(
 99			key.WithKeys("ctrl+v"),
100			key.WithHelp("ctrl+v", "paste"),
101		),
102		Close: key.NewBinding(
103			key.WithKeys("esc", "alt+esc"),
104			key.WithHelp("esc", "cancel"),
105		),
106	}
107}
108
109// KeyBindings implements layout.KeyMapProvider
110func (k ArgumentsDialogKeyMap) KeyBindings() []key.Binding {
111	return []key.Binding{
112		k.Confirm,
113		k.Next,
114		k.Previous,
115		k.Paste,
116		k.Close,
117	}
118}
119
120// FullHelp implements help.KeyMap.
121func (k ArgumentsDialogKeyMap) FullHelp() [][]key.Binding {
122	m := [][]key.Binding{}
123	slice := k.KeyBindings()
124	for i := 0; i < len(slice); i += 4 {
125		end := min(i+4, len(slice))
126		m = append(m, slice[i:end])
127	}
128	return m
129}
130
131// ShortHelp implements help.KeyMap.
132func (k ArgumentsDialogKeyMap) ShortHelp() []key.Binding {
133	return []key.Binding{
134		k.Confirm,
135		k.Next,
136		k.Previous,
137		k.Paste,
138		k.Close,
139	}
140}