keys.go

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