keys.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package sessions
  2. import (
  3. "github.com/charmbracelet/bubbles/v2/key"
  4. )
  5. type KeyMap struct {
  6. Select,
  7. Next,
  8. Previous,
  9. Close key.Binding
  10. }
  11. func DefaultKeyMap() KeyMap {
  12. return KeyMap{
  13. Select: key.NewBinding(
  14. key.WithKeys("enter", "tab"),
  15. key.WithHelp("enter", "confirm"),
  16. ),
  17. Next: key.NewBinding(
  18. key.WithKeys("down"),
  19. key.WithHelp("↓", "down"),
  20. ),
  21. Previous: key.NewBinding(
  22. key.WithKeys("up"),
  23. key.WithHelp("↑", "up"),
  24. ),
  25. Close: key.NewBinding(
  26. key.WithKeys("esc"),
  27. key.WithHelp("esc", "cancel"),
  28. ),
  29. }
  30. }
  31. // KeyBindings implements layout.KeyMapProvider
  32. func (k KeyMap) KeyBindings() []key.Binding {
  33. return []key.Binding{
  34. k.Select,
  35. k.Next,
  36. k.Previous,
  37. k.Close,
  38. }
  39. }
  40. // FullHelp implements help.KeyMap.
  41. func (k KeyMap) FullHelp() [][]key.Binding {
  42. m := [][]key.Binding{}
  43. slice := k.KeyBindings()
  44. for i := 0; i < len(slice); i += 4 {
  45. end := min(i+4, len(slice))
  46. m = append(m, slice[i:end])
  47. }
  48. return m
  49. }
  50. // ShortHelp implements help.KeyMap.
  51. func (k KeyMap) ShortHelp() []key.Binding {
  52. return []key.Binding{
  53. key.NewBinding(
  54. key.WithKeys("down", "up"),
  55. key.WithHelp("↑↓", "choose"),
  56. ),
  57. k.Select,
  58. k.Close,
  59. }
  60. }