keys.go

 1package models
 2
 3import (
 4	"github.com/charmbracelet/bubbles/v2/key"
 5	"github.com/charmbracelet/crush/internal/tui/layout"
 6)
 7
 8type KeyMap struct {
 9	Select,
10	Next,
11	Previous,
12	Close key.Binding
13}
14
15func DefaultKeyMap() KeyMap {
16	return KeyMap{
17		Select: key.NewBinding(
18			key.WithKeys("enter", "tab", "ctrl+y"),
19			key.WithHelp("enter", "confirm"),
20		),
21		Next: key.NewBinding(
22			key.WithKeys("down", "ctrl+n"),
23			key.WithHelp("↓", "next item"),
24		),
25		Previous: key.NewBinding(
26			key.WithKeys("up", "ctrl+p"),
27			key.WithHelp("↑", "previous item"),
28		),
29		Close: key.NewBinding(
30			key.WithKeys("esc"),
31			key.WithHelp("esc", "cancel"),
32		),
33	}
34}
35
36// FullHelp implements help.KeyMap.
37func (k KeyMap) FullHelp() [][]key.Binding {
38	m := [][]key.Binding{}
39	slice := layout.KeyMapToSlice(k)
40	for i := 0; i < len(slice); i += 4 {
41		end := min(i+4, len(slice))
42		m = append(m, slice[i:end])
43	}
44	return m
45}
46
47// ShortHelp implements help.KeyMap.
48func (k KeyMap) ShortHelp() []key.Binding {
49	return []key.Binding{
50		key.NewBinding(
51
52			key.WithKeys("down", "up"),
53			key.WithHelp("↑↓", "choose"),
54		),
55		k.Select,
56		k.Close,
57	}
58}