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 key.Binding
15}
16
17func DefaultKeyMap() KeyMap {
18	return KeyMap{
19		Left: key.NewBinding(
20			key.WithKeys("left", "h"),
21			key.WithHelp("←", "previous"),
22		),
23		Right: key.NewBinding(
24			key.WithKeys("right", "l"),
25			key.WithHelp("→", "next"),
26		),
27		Tab: key.NewBinding(
28			key.WithKeys("tab"),
29			key.WithHelp("tab", "switch"),
30		),
31		Allow: key.NewBinding(
32			key.WithKeys("a", "ctrl+a"),
33			key.WithHelp("a", "allow"),
34		),
35		AllowSession: key.NewBinding(
36			key.WithKeys("s", "ctrl+s"),
37			key.WithHelp("s", "allow session"),
38		),
39		Deny: key.NewBinding(
40			key.WithKeys("d", "ctrl+d"),
41			key.WithHelp("d", "deny"),
42		),
43		Select: key.NewBinding(
44			key.WithKeys("enter", "tab", "ctrl+y"),
45			key.WithHelp("enter", "confirm"),
46		),
47	}
48}
49
50// KeyBindings implements layout.KeyMapProvider
51func (k KeyMap) KeyBindings() []key.Binding {
52	return []key.Binding{
53		k.Left,
54		k.Right,
55		k.Tab,
56		k.Select,
57		k.Allow,
58		k.AllowSession,
59		k.Deny,
60	}
61}
62
63// FullHelp implements help.KeyMap.
64func (k KeyMap) FullHelp() [][]key.Binding {
65	m := [][]key.Binding{}
66	slice := k.KeyBindings()
67	for i := 0; i < len(slice); i += 4 {
68		end := min(i+4, len(slice))
69		m = append(m, slice[i:end])
70	}
71	return m
72}
73
74// ShortHelp implements help.KeyMap.
75func (k KeyMap) ShortHelp() []key.Binding {
76	return []key.Binding{
77		k.Allow,
78		k.AllowSession,
79		k.Deny,
80		k.Select,
81	}
82}