keymap.go

  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	Back      key.Binding
 16	PrevPage  key.Binding
 17	NextPage  key.Binding
 18	Help      key.Binding
 19
 20	SelectItem key.Binding
 21	BackItem   key.Binding
 22}
 23
 24// DefaultKeyMap returns the default key map.
 25func DefaultKeyMap() *KeyMap {
 26	km := new(KeyMap)
 27
 28	km.Quit = key.NewBinding(
 29		key.WithKeys(
 30			"q",
 31			"ctrl+c",
 32		),
 33		key.WithHelp(
 34			"q",
 35			"quit",
 36		),
 37	)
 38
 39	km.Up = key.NewBinding(
 40		key.WithKeys(
 41			"up",
 42			"k",
 43		),
 44		key.WithHelp(
 45			"↑",
 46			"up",
 47		),
 48	)
 49
 50	km.Down = key.NewBinding(
 51		key.WithKeys(
 52			"down",
 53			"j",
 54		),
 55		key.WithHelp(
 56			"↓",
 57			"down",
 58		),
 59	)
 60
 61	km.UpDown = key.NewBinding(
 62		key.WithKeys(
 63			"up",
 64			"down",
 65			"k",
 66			"j",
 67		),
 68		key.WithHelp(
 69			"↑↓",
 70			"navigate",
 71		),
 72	)
 73
 74	km.LeftRight = key.NewBinding(
 75		key.WithKeys(
 76			"left",
 77			"h",
 78			"right",
 79			"l",
 80		),
 81		key.WithHelp(
 82			"←→",
 83			"navigate",
 84		),
 85	)
 86
 87	km.Arrows = key.NewBinding(
 88		key.WithKeys(
 89			"up",
 90			"right",
 91			"down",
 92			"left",
 93			"k",
 94			"j",
 95			"h",
 96			"l",
 97		),
 98		key.WithHelp(
 99			"↑←↓→",
100			"navigate",
101		),
102	)
103
104	km.Select = key.NewBinding(
105		key.WithKeys(
106			"enter",
107		),
108		key.WithHelp(
109			"enter",
110			"select",
111		),
112	)
113
114	km.Section = key.NewBinding(
115		key.WithKeys(
116			"tab",
117			"shift+tab",
118		),
119		key.WithHelp(
120			"tab",
121			"section",
122		),
123	)
124
125	km.Back = key.NewBinding(
126		key.WithKeys(
127			"esc",
128		),
129		key.WithHelp(
130			"esc",
131			"back",
132		),
133	)
134
135	km.PrevPage = key.NewBinding(
136		key.WithKeys(
137			"pgup",
138			"b",
139			"u",
140		),
141		key.WithHelp(
142			"pgup",
143			"prev page",
144		),
145	)
146
147	km.NextPage = key.NewBinding(
148		key.WithKeys(
149			"pgdown",
150			"f",
151			"d",
152		),
153		key.WithHelp(
154			"pgdn",
155			"next page",
156		),
157	)
158
159	km.Help = key.NewBinding(
160		key.WithKeys(
161			"?",
162		),
163		key.WithHelp(
164			"?",
165			"toggle help",
166		),
167	)
168
169	km.SelectItem = key.NewBinding(
170		key.WithKeys(
171			"l",
172			"right",
173		),
174		key.WithHelp(
175			"→",
176			"select",
177		),
178	)
179
180	km.BackItem = key.NewBinding(
181		key.WithKeys(
182			"h",
183			"left",
184		),
185		key.WithHelp(
186			"←",
187			"back",
188		),
189	)
190
191	return km
192}