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}