171 lines
5.5 KiB
Go
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},
|
|
}
|
|
}
|