1package tui
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5 "github.com/opencode-ai/opencode/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 FilePicker key.Binding
14 Models key.Binding
15 SwitchTheme key.Binding
16}
17
18func DefaultKeyMap() KeyMap {
19 return KeyMap{
20 Logs: key.NewBinding(
21 key.WithKeys("ctrl+l"),
22 key.WithHelp("ctrl+l", "logs"),
23 ),
24
25 Quit: key.NewBinding(
26 key.WithKeys("ctrl+c"),
27 key.WithHelp("ctrl+c", "quit"),
28 ),
29
30 Help: key.NewBinding(
31 key.WithKeys("ctrl+_"),
32 key.WithHelp("ctrl+?", "toggle help"),
33 ),
34
35 Commands: key.NewBinding(
36 key.WithKeys("ctrl+k"),
37 key.WithHelp("ctrl+k", "commands"),
38 ),
39 FilePicker: key.NewBinding(
40 key.WithKeys("ctrl+f"),
41 key.WithHelp("ctrl+f", "select files to upload"),
42 ),
43 Models: key.NewBinding(
44 key.WithKeys("ctrl+o"),
45 key.WithHelp("ctrl+o", "model selection"),
46 ),
47
48 SwitchTheme: key.NewBinding(
49 key.WithKeys("ctrl+t"),
50 key.WithHelp("ctrl+t", "switch theme"),
51 ),
52 }
53}
54
55// FullHelp implements help.KeyMap.
56func (k KeyMap) FullHelp() [][]key.Binding {
57 m := [][]key.Binding{}
58 slice := layout.KeyMapToSlice(k)
59 for i := 0; i < len(slice); i += 4 {
60 end := min(i+4, len(slice))
61 m = append(m, slice[i:end])
62 }
63 return m
64}
65
66// ShortHelp implements help.KeyMap.
67func (k KeyMap) ShortHelp() []key.Binding {
68 return []key.Binding{}
69}