1package tui
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5 "github.com/charmbracelet/crush/internal/tui/layout"
6)
7
8type KeyMap struct {
9 Logs key.Binding
10 Quit key.Binding
11 Help key.Binding
12 Commands key.Binding
13 Sessions key.Binding
14}
15
16func DefaultKeyMap() KeyMap {
17 return KeyMap{
18 Logs: key.NewBinding(
19 key.WithKeys("ctrl+l"),
20 key.WithHelp("ctrl+l", "logs"),
21 ),
22 Quit: key.NewBinding(
23 key.WithKeys("ctrl+c"),
24 key.WithHelp("ctrl+c", "quit"),
25 ),
26
27 Help: key.NewBinding(
28 key.WithKeys("ctrl+_"),
29 key.WithHelp("ctrl+?", "toggle help"),
30 ),
31 Commands: key.NewBinding(
32 key.WithKeys("ctrl+p"),
33 key.WithHelp("ctrl+p", "commands"),
34 ),
35 Sessions: key.NewBinding(
36 key.WithKeys("ctrl+s"),
37 key.WithHelp("ctrl+s", "sessions"),
38 ),
39 }
40}
41
42// FullHelp implements help.KeyMap.
43func (k KeyMap) FullHelp() [][]key.Binding {
44 m := [][]key.Binding{}
45 slice := layout.KeyMapToSlice(k)
46 for i := 0; i < len(slice); i += 4 {
47 end := min(i+4, len(slice))
48 m = append(m, slice[i:end])
49 }
50 return m
51}
52
53// ShortHelp implements help.KeyMap.
54func (k KeyMap) ShortHelp() []key.Binding {
55 return []key.Binding{}
56}