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 DownInsert,
13 UpInsert key.Binding
14}
15
16func DefaultKeyMap() KeyMap {
17 return KeyMap{
18 Down: key.NewBinding(
19 key.WithKeys("down"),
20 key.WithHelp("down", "move down"),
21 ),
22 Up: key.NewBinding(
23 key.WithKeys("up"),
24 key.WithHelp("up", "move up"),
25 ),
26 Select: key.NewBinding(
27 key.WithKeys("enter", "tab", "ctrl+y"),
28 key.WithHelp("enter", "select"),
29 ),
30 Cancel: key.NewBinding(
31 key.WithKeys("esc"),
32 key.WithHelp("esc", "cancel"),
33 ),
34 DownInsert: key.NewBinding(
35 key.WithKeys("ctrl+n"),
36 key.WithHelp("ctrl+n", "insert next"),
37 ),
38 UpInsert: key.NewBinding(
39 key.WithKeys("ctrl+p"),
40 key.WithHelp("ctrl+p", "insert previous"),
41 ),
42 }
43}
44
45// KeyBindings implements layout.KeyMapProvider
46func (k KeyMap) KeyBindings() []key.Binding {
47 return []key.Binding{
48 k.Down,
49 k.Up,
50 k.Select,
51 k.Cancel,
52 }
53}
54
55// FullHelp implements help.KeyMap.
56func (k KeyMap) FullHelp() [][]key.Binding {
57 m := [][]key.Binding{}
58 slice := k.KeyBindings()
59 for i := 0; i < len(slice); i += 4 {
60 end := min(i+4, len(slice))
61 m = append(m, slice[i:end])
62 }
63 return m
64}
65
66// ShortHelp implements help.KeyMap.
67func (k KeyMap) ShortHelp() []key.Binding {
68 return []key.Binding{
69 k.Up,
70 k.Down,
71 }
72}