1package permissions
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5 "github.com/charmbracelet/crush/internal/tui/layout"
6)
7
8type KeyMap struct {
9 Left,
10 Right,
11 Tab,
12 Select,
13 Allow,
14 AllowSession,
15 Deny key.Binding
16}
17
18func DefaultKeyMap() KeyMap {
19 return KeyMap{
20 Left: key.NewBinding(
21 key.WithKeys("left", "h"),
22 key.WithHelp("←", "previous"),
23 ),
24 Right: key.NewBinding(
25 key.WithKeys("right", "l"),
26 key.WithHelp("→", "next"),
27 ),
28 Tab: key.NewBinding(
29 key.WithKeys("tab"),
30 key.WithHelp("tab", "switch"),
31 ),
32 Allow: key.NewBinding(
33 key.WithKeys("a", "ctrl+a"),
34 key.WithHelp("a", "allow"),
35 ),
36 AllowSession: key.NewBinding(
37 key.WithKeys("s", "ctrl+s"),
38 key.WithHelp("s", "allow session"),
39 ),
40 Deny: key.NewBinding(
41 key.WithKeys("d", "ctrl+d"),
42 key.WithHelp("d", "deny"),
43 ),
44 Select: key.NewBinding(
45 key.WithKeys("enter", "tab", "ctrl+y"),
46 key.WithHelp("enter", "confirm"),
47 ),
48 }
49}
50
51// FullHelp implements help.KeyMap.
52func (k KeyMap) FullHelp() [][]key.Binding {
53 m := [][]key.Binding{}
54 slice := layout.KeyMapToSlice(k)
55 for i := 0; i < len(slice); i += 4 {
56 end := min(i+4, len(slice))
57 m = append(m, slice[i:end])
58 }
59 return m
60}
61
62// ShortHelp implements help.KeyMap.
63func (k KeyMap) ShortHelp() []key.Binding {
64 return []key.Binding{
65 k.Allow,
66 k.AllowSession,
67 k.Deny,
68 k.Select,
69 }
70}