1package completions
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5)
6
7type KeyMap struct {
8 Down,
9 Up,
10 Select,
11 Cancel key.Binding
12}
13
14func DefaultKeyMap() KeyMap {
15 return KeyMap{
16 Down: key.NewBinding(
17 key.WithKeys("down"),
18 key.WithHelp("down", "move down"),
19 ),
20 Up: key.NewBinding(
21 key.WithKeys("up"),
22 key.WithHelp("up", "move up"),
23 ),
24 Select: key.NewBinding(
25 key.WithKeys("enter"),
26 key.WithHelp("enter", "select"),
27 ),
28 Cancel: key.NewBinding(
29 key.WithKeys("esc"),
30 key.WithHelp("esc", "cancel"),
31 ),
32 }
33}
34
35// KeyBindings implements layout.KeyMapProvider
36func (k KeyMap) KeyBindings() []key.Binding {
37 return []key.Binding{
38 k.Down,
39 k.Up,
40 k.Select,
41 k.Cancel,
42 }
43}
44
45// FullHelp implements help.KeyMap.
46func (k KeyMap) FullHelp() [][]key.Binding {
47 m := [][]key.Binding{}
48 slice := k.KeyBindings()
49 for i := 0; i < len(slice); i += 4 {
50 end := min(i+4, len(slice))
51 m = append(m, slice[i:end])
52 }
53 return m
54}
55
56// ShortHelp implements help.KeyMap.
57func (k KeyMap) ShortHelp() []key.Binding {
58 return []key.Binding{
59 k.Up,
60 k.Down,
61 }
62}