1package quit
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5 "github.com/charmbracelet/crush/internal/tui/layout"
6)
7
8// KeyMap defines the keyboard bindings for the quit dialog.
9type KeyMap struct {
10 LeftRight,
11 EnterSpace,
12 Yes,
13 No,
14 Tab,
15 Close key.Binding
16}
17
18func DefaultKeymap() KeyMap {
19 return KeyMap{
20 LeftRight: key.NewBinding(
21 key.WithKeys("left", "right"),
22 key.WithHelp("←/→", "switch options"),
23 ),
24 EnterSpace: key.NewBinding(
25 key.WithKeys("enter", " "),
26 key.WithHelp("enter/space", "confirm"),
27 ),
28 Yes: key.NewBinding(
29 key.WithKeys("y", "Y", "ctrl+c"),
30 key.WithHelp("y/Y/ctrl+c", "yes"),
31 ),
32 No: key.NewBinding(
33 key.WithKeys("n", "N"),
34 key.WithHelp("n/N", "no"),
35 ),
36 Tab: key.NewBinding(
37 key.WithKeys("tab"),
38 key.WithHelp("tab", "switch options"),
39 ),
40 Close: key.NewBinding(
41 key.WithKeys("esc"),
42 key.WithHelp("esc", "cancel"),
43 ),
44 }
45}
46
47// FullHelp implements help.KeyMap.
48func (k KeyMap) FullHelp() [][]key.Binding {
49 m := [][]key.Binding{}
50 slice := layout.KeyMapToSlice(k)
51 for i := 0; i < len(slice); i += 4 {
52 end := min(i+4, len(slice))
53 m = append(m, slice[i:end])
54 }
55 return m
56}
57
58// ShortHelp implements help.KeyMap.
59func (k KeyMap) ShortHelp() []key.Binding {
60 return []key.Binding{
61 k.LeftRight,
62 k.EnterSpace,
63 }
64}