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