keys.go

 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}