1package sessions
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5)
6
7type KeyMap struct {
8 Select,
9 Next,
10 Previous,
11 Close key.Binding
12}
13
14func DefaultKeyMap() KeyMap {
15 return KeyMap{
16 Select: key.NewBinding(
17 key.WithKeys("enter", "tab", "ctrl+y"),
18 key.WithHelp("enter", "confirm"),
19 ),
20 Next: key.NewBinding(
21 key.WithKeys("down", "ctrl+n"),
22 key.WithHelp("↓", "next item"),
23 ),
24 Previous: key.NewBinding(
25 key.WithKeys("up", "ctrl+p"),
26 key.WithHelp("↑", "previous item"),
27 ),
28 Close: key.NewBinding(
29 key.WithKeys("esc", "alt+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.Select,
39 k.Next,
40 k.Previous,
41 k.Close,
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 key.NewBinding(
60
61 key.WithKeys("down", "up"),
62 key.WithHelp("↑↓", "choose"),
63 ),
64 k.Select,
65 k.Close,
66 }
67}