1// Package viewport provides a component for rendering a viewport in a Bubble
2// Tea.
3package viewport
4
5import "github.com/charmbracelet/bubbles/v2/key"
6
7// KeyMap defines the keybindings for the viewport. Note that you don't
8// necessary need to use keybindings at all; the viewport can be controlled
9// programmatically with methods like Model.LineDown(1). See the GoDocs for
10// details.
11type KeyMap struct {
12 PageDown key.Binding
13 PageUp key.Binding
14 HalfPageUp key.Binding
15 HalfPageDown key.Binding
16 Down key.Binding
17 Up key.Binding
18 Left key.Binding
19 Right key.Binding
20}
21
22// DefaultKeyMap returns a set of pager-like default keybindings.
23func DefaultKeyMap() KeyMap {
24 return KeyMap{
25 PageDown: key.NewBinding(
26 key.WithKeys("pgdown", "space", "f"),
27 key.WithHelp("f/pgdn", "page down"),
28 ),
29 PageUp: key.NewBinding(
30 key.WithKeys("pgup", "b"),
31 key.WithHelp("b/pgup", "page up"),
32 ),
33 HalfPageUp: key.NewBinding(
34 key.WithKeys("u", "ctrl+u"),
35 key.WithHelp("u", "½ page up"),
36 ),
37 HalfPageDown: key.NewBinding(
38 key.WithKeys("d", "ctrl+d"),
39 key.WithHelp("d", "½ page down"),
40 ),
41 Up: key.NewBinding(
42 key.WithKeys("up", "k"),
43 key.WithHelp("↑/k", "up"),
44 ),
45 Down: key.NewBinding(
46 key.WithKeys("down", "j"),
47 key.WithHelp("↓/j", "down"),
48 ),
49 Left: key.NewBinding(
50 key.WithKeys("left", "h"),
51 key.WithHelp("←/h", "move left"),
52 ),
53 Right: key.NewBinding(
54 key.WithKeys("right", "l"),
55 key.WithHelp("→/l", "move right"),
56 ),
57 }
58}