keys.go

 1package init
 2
 3import (
 4	"github.com/charmbracelet/bubbles/v2/key"
 5)
 6
 7type KeyMap struct {
 8	ChangeSelection,
 9	Select,
10	Y,
11	N,
12	Close key.Binding
13}
14
15func DefaultKeyMap() KeyMap {
16	return KeyMap{
17		ChangeSelection: key.NewBinding(
18			key.WithKeys("tab", "left", "right", "h", "l"),
19			key.WithHelp("tab/←/→", "toggle selection"),
20		),
21		Select: key.NewBinding(
22			key.WithKeys("enter"),
23			key.WithHelp("enter", "confirm"),
24		),
25		Y: key.NewBinding(
26			key.WithKeys("y"),
27			key.WithHelp("y", "yes"),
28		),
29		N: key.NewBinding(
30			key.WithKeys("n"),
31			key.WithHelp("n", "no"),
32		),
33		Close: key.NewBinding(
34			key.WithKeys("esc"),
35			key.WithHelp("esc", "cancel"),
36		),
37	}
38}
39
40// KeyBindings implements layout.KeyMapProvider
41func (k KeyMap) KeyBindings() []key.Binding {
42	return []key.Binding{
43		k.ChangeSelection,
44		k.Select,
45		k.Y,
46		k.N,
47		k.Close,
48	}
49}
50
51// FullHelp implements help.KeyMap.
52func (k KeyMap) 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 KeyMap) ShortHelp() []key.Binding {
64	return []key.Binding{
65		k.ChangeSelection,
66		k.Select,
67		k.Close,
68	}
69}