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}
 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}