keys.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package permissions
  2. import (
  3. "github.com/charmbracelet/bubbles/v2/key"
  4. )
  5. type KeyMap struct {
  6. Left,
  7. Right,
  8. Tab,
  9. Select,
  10. Allow,
  11. AllowSession,
  12. Deny,
  13. ToggleDiffMode,
  14. ScrollDown,
  15. ScrollUp key.Binding
  16. ScrollLeft,
  17. ScrollRight key.Binding
  18. }
  19. func DefaultKeyMap() KeyMap {
  20. return KeyMap{
  21. Left: key.NewBinding(
  22. key.WithKeys("left", "h"),
  23. key.WithHelp("←", "previous"),
  24. ),
  25. Right: key.NewBinding(
  26. key.WithKeys("right", "l"),
  27. key.WithHelp("→", "next"),
  28. ),
  29. Tab: key.NewBinding(
  30. key.WithKeys("tab"),
  31. key.WithHelp("tab", "switch"),
  32. ),
  33. Allow: key.NewBinding(
  34. key.WithKeys("a", "A", "ctrl+a"),
  35. key.WithHelp("a", "allow"),
  36. ),
  37. AllowSession: key.NewBinding(
  38. key.WithKeys("s", "S", "ctrl+s"),
  39. key.WithHelp("s", "allow session"),
  40. ),
  41. Deny: key.NewBinding(
  42. key.WithKeys("d", "D", "ctrl+d", "esc"),
  43. key.WithHelp("d", "deny"),
  44. ),
  45. Select: key.NewBinding(
  46. key.WithKeys("enter"),
  47. key.WithHelp("enter", "confirm"),
  48. ),
  49. ToggleDiffMode: key.NewBinding(
  50. key.WithKeys("t"),
  51. key.WithHelp("t", "toggle diff mode"),
  52. ),
  53. ScrollDown: key.NewBinding(
  54. key.WithKeys("shift+down", "J"),
  55. key.WithHelp("shift+↓", "scroll down"),
  56. ),
  57. ScrollUp: key.NewBinding(
  58. key.WithKeys("shift+up", "K"),
  59. key.WithHelp("shift+↑", "scroll up"),
  60. ),
  61. ScrollLeft: key.NewBinding(
  62. key.WithKeys("shift+left", "H"),
  63. key.WithHelp("shift+←", "scroll left"),
  64. ),
  65. ScrollRight: key.NewBinding(
  66. key.WithKeys("shift+right", "L"),
  67. key.WithHelp("shift+→", "scroll right"),
  68. ),
  69. }
  70. }
  71. // KeyBindings implements layout.KeyMapProvider
  72. func (k KeyMap) KeyBindings() []key.Binding {
  73. return []key.Binding{
  74. k.Left,
  75. k.Right,
  76. k.Tab,
  77. k.Select,
  78. k.Allow,
  79. k.AllowSession,
  80. k.Deny,
  81. k.ToggleDiffMode,
  82. k.ScrollDown,
  83. k.ScrollUp,
  84. k.ScrollLeft,
  85. k.ScrollRight,
  86. }
  87. }
  88. // FullHelp implements help.KeyMap.
  89. func (k KeyMap) FullHelp() [][]key.Binding {
  90. m := [][]key.Binding{}
  91. slice := k.KeyBindings()
  92. for i := 0; i < len(slice); i += 4 {
  93. end := min(i+4, len(slice))
  94. m = append(m, slice[i:end])
  95. }
  96. return m
  97. }
  98. // ShortHelp implements help.KeyMap.
  99. func (k KeyMap) ShortHelp() []key.Binding {
  100. return []key.Binding{
  101. k.ToggleDiffMode,
  102. key.NewBinding(
  103. key.WithKeys("shift+left", "shift+down", "shift+up", "shift+right"),
  104. key.WithHelp("shift+←↓↑→", "scroll"),
  105. ),
  106. }
  107. }