keys.go

 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}