1package keymap
2
3import "github.com/charmbracelet/bubbles/key"
4
5// KeyMap is a map of key bindings for the UI.
6type KeyMap struct {
7 Quit key.Binding
8 Up key.Binding
9 Down key.Binding
10 UpDown key.Binding
11 LeftRight key.Binding
12 Arrows key.Binding
13 Select key.Binding
14 Section key.Binding
15}
16
17// DefaultKeyMap returns the default key map.
18func DefaultKeyMap() *KeyMap {
19 km := new(KeyMap)
20
21 km.Quit = key.NewBinding(
22 key.WithKeys(
23 "q",
24 "ctrl+c",
25 ),
26 key.WithHelp(
27 "q",
28 "quit",
29 ),
30 )
31
32 km.Up = key.NewBinding(
33 key.WithKeys(
34 "up",
35 "k",
36 ),
37 key.WithHelp(
38 "↑",
39 "up",
40 ),
41 )
42
43 km.Down = key.NewBinding(
44 key.WithKeys(
45 "down",
46 "j",
47 ),
48 key.WithHelp(
49 "↓",
50 "down",
51 ),
52 )
53
54 km.UpDown = key.NewBinding(
55 key.WithKeys(
56 "up",
57 "down",
58 "k",
59 "j",
60 ),
61 key.WithHelp(
62 "↑↓",
63 "navigate",
64 ),
65 )
66
67 km.LeftRight = key.NewBinding(
68 key.WithKeys(
69 "left",
70 "h",
71 "right",
72 "l",
73 ),
74 key.WithHelp(
75 "←→",
76 "navigate",
77 ),
78 )
79
80 km.Arrows = key.NewBinding(
81 key.WithKeys(
82 "up",
83 "right",
84 "down",
85 "left",
86 "k",
87 "j",
88 "h",
89 "l",
90 ),
91 key.WithHelp(
92 "↑←↓→",
93 "navigate",
94 ),
95 )
96
97 km.Select = key.NewBinding(
98 key.WithKeys(
99 "enter",
100 ),
101 key.WithHelp(
102 "enter",
103 "select",
104 ),
105 )
106
107 km.Section = key.NewBinding(
108 key.WithKeys(
109 "tab",
110 "shift+tab",
111 ),
112 key.WithHelp(
113 "tab",
114 "section",
115 ),
116 )
117
118 return km
119}