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", "alt+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}