| 1 | // Package tui holds bubbletea helpers shared by andromeda Go apps. |
| 2 | package tui |
| 3 | |
| 4 | import "charm.land/bubbles/v2/key" |
| 5 | |
| 6 | // KeyMap is the default keybinding set used by the andromeda Go TUIs. |
| 7 | type KeyMap struct { |
| 8 | Open key.Binding |
| 9 | Back key.Binding |
| 10 | Quit key.Binding |
| 11 | Create key.Binding |
| 12 | Edit key.Binding |
| 13 | ExtEdit key.Binding |
| 14 | Delete key.Binding |
| 15 | Copy key.Binding |
| 16 | CopyLink key.Binding |
| 17 | OpenBrowser key.Binding |
| 18 | Refresh key.Binding |
| 19 | ToggleWrap key.Binding |
| 20 | Help key.Binding |
| 21 | ScrollUp key.Binding |
| 22 | ScrollDown key.Binding |
| 23 | } |
| 24 | |
| 25 | // DefaultKeys returns the canonical key map shared across apps. |
| 26 | func DefaultKeys() KeyMap { |
| 27 | return KeyMap{ |
| 28 | Open: key.NewBinding(key.WithKeys("enter", "l"), key.WithHelp("⏎/l", "open")), |
| 29 | Back: key.NewBinding(key.WithKeys("h", "esc"), key.WithHelp("h/esc", "back")), |
| 30 | Quit: key.NewBinding(key.WithKeys("q", "ctrl+c"), key.WithHelp("q", "quit")), |
| 31 | Create: key.NewBinding(key.WithKeys("c"), key.WithHelp("c", "create")), |
| 32 | Edit: key.NewBinding(key.WithKeys("e"), key.WithHelp("e", "edit")), |
| 33 | ExtEdit: key.NewBinding(key.WithKeys("E"), key.WithHelp("E", "$EDITOR")), |
| 34 | Delete: key.NewBinding(key.WithKeys("d"), key.WithHelp("d", "delete")), |
| 35 | Copy: key.NewBinding(key.WithKeys("y"), key.WithHelp("y", "copy text")), |
| 36 | CopyLink: key.NewBinding(key.WithKeys("Y"), key.WithHelp("Y", "copy link")), |
| 37 | OpenBrowser: key.NewBinding(key.WithKeys("o"), key.WithHelp("o", "browser")), |
| 38 | Refresh: key.NewBinding(key.WithKeys("r"), key.WithHelp("r", "refresh")), |
| 39 | ToggleWrap: key.NewBinding(key.WithKeys("ctrl+w"), key.WithHelp("⌃w", "wrap")), |
| 40 | Help: key.NewBinding(key.WithKeys("?"), key.WithHelp("?", "help")), |
| 41 | ScrollUp: key.NewBinding(key.WithKeys("up", "k"), key.WithHelp("↑/k", "up")), |
| 42 | ScrollDown: key.NewBinding(key.WithKeys("down", "j"), key.WithHelp("↓/j", "down")), |
| 43 | } |
| 44 | } |
| 45 | |
| 46 | func (k KeyMap) ShortHelp() []key.Binding { |
| 47 | return []key.Binding{k.Open, k.Create, k.Edit, k.Delete, k.Help, k.Quit} |
| 48 | } |
| 49 | |
| 50 | func (k KeyMap) FullHelp() [][]key.Binding { |
| 51 | return [][]key.Binding{ |
| 52 | {k.Open, k.Back, k.Create, k.Edit}, |
| 53 | {k.ExtEdit, k.Delete, k.Copy, k.CopyLink}, |
| 54 | {k.OpenBrowser, k.Refresh, k.ToggleWrap, k.Help}, |
| 55 | {k.ScrollUp, k.ScrollDown, k.Quit}, |
| 56 | } |
| 57 | } |