keymap.go 1.4 KB

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