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}