admin 8dc496b626
Some checks failed
CI / test (push) Has been cancelled
Release / release (push) Failing after 4m36s
first commit
2026-03-08 15:40:34 +07:00

171 lines
5.5 KiB
Go

package tui
import "charm.land/bubbles/v2/key"
// KeyMap defines all keyboard shortcuts for the application.
type KeyMap struct {
Send key.Binding
NewLine key.Binding
Cancel key.Binding
Quit key.Binding
ClearView key.Binding
NewConvo key.Binding
Help key.Binding
ToggleTools key.Binding
PageUp key.Binding
PageDown key.Binding
HalfPageUp key.Binding
HalfPageDn key.Binding
Complete key.Binding
CompleteUp key.Binding
CompleteDown key.Binding
CompleteToggle key.Binding
CompleteSelect key.Binding
CopyLast key.Binding
CycleMode key.Binding
ModelPicker key.Binding
HistoryUp key.Binding
HistoryDown key.Binding
ToggleFocusedTool key.Binding
ToggleThinking key.Binding
CompactToggle key.Binding
ExternalEditor key.Binding
ToggleSidePanel key.Binding
LanguageCycle key.Binding
}
// DefaultKeyMap returns the default keybindings.
func DefaultKeyMap() KeyMap {
return KeyMap{
Send: key.NewBinding(
key.WithKeys("enter"),
key.WithHelp("enter", "send message"),
),
NewLine: key.NewBinding(
key.WithKeys("shift+enter"),
key.WithHelp("shift+enter", "new line"),
),
Cancel: key.NewBinding(
key.WithKeys("esc"),
key.WithHelp("esc", "cancel / close overlay"),
),
Quit: key.NewBinding(
key.WithKeys("ctrl+c", "ctrl+q", "f10"),
key.WithHelp("ctrl+c / ctrl+q / F10", "quit"),
),
ClearView: key.NewBinding(
key.WithKeys("ctrl+l"),
key.WithHelp("ctrl+l", "clear screen"),
),
NewConvo: key.NewBinding(
key.WithKeys("ctrl+n"),
key.WithHelp("ctrl+n", "new conversation"),
),
Help: key.NewBinding(
key.WithKeys("?"),
key.WithHelp("?", "toggle help"),
),
ToggleTools: key.NewBinding(
key.WithKeys("t"),
key.WithHelp("t", "expand/collapse tool details"),
),
PageUp: key.NewBinding(
key.WithKeys("pgup"),
key.WithHelp("pgup", "scroll up"),
),
PageDown: key.NewBinding(
key.WithKeys("pgdown"),
key.WithHelp("pgdown", "scroll down"),
),
HalfPageUp: key.NewBinding(
key.WithKeys("ctrl+u"),
key.WithHelp("ctrl+u", "half page up"),
),
HalfPageDn: key.NewBinding(
key.WithKeys("ctrl+d"),
key.WithHelp("ctrl+d", "half page down"),
),
Complete: key.NewBinding(
key.WithKeys("tab", "ctrl+i"),
key.WithHelp("tab", "autocomplete"),
),
CompleteUp: key.NewBinding(
key.WithKeys("up"),
key.WithHelp("up", "previous completion"),
),
CompleteDown: key.NewBinding(
key.WithKeys("down"),
key.WithHelp("down", "next completion"),
),
CompleteToggle: key.NewBinding(
key.WithKeys("tab", "ctrl+i"),
key.WithHelp("tab", "toggle selection"),
),
CompleteSelect: key.NewBinding(
key.WithKeys("enter"),
key.WithHelp("enter", "select item"),
),
CopyLast: key.NewBinding(
key.WithKeys("ctrl+y"),
key.WithHelp("ctrl+y", "copy last response"),
),
CycleMode: key.NewBinding(
key.WithKeys("shift+tab"),
key.WithHelp("shift+tab", "cycle mode (ASK/PLAN/BUILD)"),
),
ModelPicker: key.NewBinding(
key.WithKeys("f6", "ctrl+m"),
key.WithHelp("F6 / ctrl+m", "quick model switch"),
),
HistoryUp: key.NewBinding(
key.WithKeys("up"),
key.WithHelp("↑", "previous input"),
),
HistoryDown: key.NewBinding(
key.WithKeys("down"),
key.WithHelp("↓", "next input"),
),
ToggleFocusedTool: key.NewBinding(
key.WithKeys(" "),
key.WithHelp("space", "toggle last tool details"),
),
ToggleThinking: key.NewBinding(
key.WithKeys("ctrl+t"),
key.WithHelp("ctrl+t", "toggle thinking display"),
),
CompactToggle: key.NewBinding(
key.WithKeys("ctrl+k"),
key.WithHelp("ctrl+k", "toggle compact mode"),
),
ExternalEditor: key.NewBinding(
key.WithKeys("ctrl+e"),
key.WithHelp("ctrl+e", "open in $EDITOR"),
),
ToggleSidePanel: key.NewBinding(
key.WithKeys("ctrl+b"),
key.WithHelp("ctrl+b", "toggle side panel"),
),
LanguageCycle: key.NewBinding(
key.WithKeys("f2"),
key.WithHelp("F2", "language"),
),
}
}
// ShortHelp returns the key groups for the short help view.
func (k KeyMap) ShortHelp() []key.Binding {
return []key.Binding{k.Send, k.NewLine, k.Cancel, k.Quit, k.Help}
}
// FullHelp returns the key groups for the full help view.
func (k KeyMap) FullHelp() [][]key.Binding {
return [][]key.Binding{
{k.Send, k.NewLine, k.Cancel, k.Quit},
{k.ClearView, k.NewConvo, k.Help, k.ToggleTools, k.CopyLast},
{k.PageUp, k.PageDown, k.HalfPageUp, k.HalfPageDn},
{k.CycleMode, k.ModelPicker, k.ToggleSidePanel},
{k.HistoryUp, k.HistoryDown},
{k.ToggleFocusedTool, k.ToggleThinking, k.CompactToggle, k.ExternalEditor},
}
}