keys.go

 1package editor
 2
 3import (
 4	"github.com/charmbracelet/bubbles/v2/key"
 5)
 6
 7type EditorKeyMap struct {
 8	Send       key.Binding
 9	OpenEditor key.Binding
10}
11
12func DefaultEditorKeyMap() EditorKeyMap {
13	return EditorKeyMap{
14		Send: key.NewBinding(
15			key.WithKeys("enter"),
16			key.WithHelp("enter", "send"),
17		),
18		OpenEditor: key.NewBinding(
19			key.WithKeys("ctrl+e"),
20			key.WithHelp("ctrl+e", "open editor"),
21		),
22	}
23}
24
25// KeyBindings implements layout.KeyMapProvider
26func (k EditorKeyMap) KeyBindings() []key.Binding {
27	return []key.Binding{
28		k.Send,
29		k.OpenEditor,
30	}
31}
32
33// FullHelp implements help.KeyMap.
34func (k EditorKeyMap) FullHelp() [][]key.Binding {
35	m := [][]key.Binding{}
36	slice := k.KeyBindings()
37	for i := 0; i < len(slice); i += 4 {
38		end := min(i+4, len(slice))
39		m = append(m, slice[i:end])
40	}
41	return m
42}
43
44// ShortHelp implements help.KeyMap.
45func (k EditorKeyMap) ShortHelp() []key.Binding {
46	return []key.Binding{
47		k.Send,
48		k.OpenEditor,
49	}
50}
51
52// TODO: update this to use the new keymap concepts
53var AttachmentsKeyMaps = DeleteAttachmentKeyMaps{
54	AttachmentDeleteMode: key.NewBinding(
55		key.WithKeys("ctrl+r"),
56		key.WithHelp("ctrl+r+{i}", "delete attachment at index i"),
57	),
58	Escape: key.NewBinding(
59		key.WithKeys("esc"),
60		key.WithHelp("esc", "cancel delete mode"),
61	),
62	DeleteAllAttachments: key.NewBinding(
63		key.WithKeys("r"),
64		key.WithHelp("ctrl+r+r", "delete all attachments"),
65	),
66}