Files
crush/internal/ui/model/keys.go
Andrey Nering 2b941aaa0d feat(ui): add ctrl+y keybinding to toggle yolo mode
💘 Generated with Crush

Assisted-by: Crush:qwen3.7-max
2026-05-25 14:11:30 -03:00

272 lines
6.6 KiB
Go

package model
import "charm.land/bubbles/v2/key"
type KeyMap struct {
Editor struct {
AddFile key.Binding
SendMessage key.Binding
OpenEditor key.Binding
Newline key.Binding
AddImage key.Binding
PasteImage key.Binding
MentionFile key.Binding
Commands key.Binding
// Attachments key maps
AttachmentDeleteMode key.Binding
Escape key.Binding
DeleteAllAttachments key.Binding
// History navigation
HistoryPrev key.Binding
HistoryNext key.Binding
}
Chat struct {
NewSession key.Binding
AddAttachment key.Binding
Cancel key.Binding
Tab key.Binding
Details key.Binding
TogglePills key.Binding
PillLeft key.Binding
PillRight key.Binding
Down key.Binding
Up key.Binding
UpDown key.Binding
DownOneItem key.Binding
UpOneItem key.Binding
UpDownOneItem key.Binding
PageDown key.Binding
PageUp key.Binding
HalfPageDown key.Binding
HalfPageUp key.Binding
Home key.Binding
End key.Binding
Copy key.Binding
ClearHighlight key.Binding
Expand key.Binding
}
Initialize struct {
Yes,
No,
Enter,
Switch key.Binding
}
// Global key maps
Quit key.Binding
Help key.Binding
Commands key.Binding
Models key.Binding
Suspend key.Binding
Sessions key.Binding
Tab key.Binding
ToggleYolo key.Binding
}
func DefaultKeyMap() KeyMap {
km := KeyMap{
Quit: key.NewBinding(
key.WithKeys("ctrl+c"),
key.WithHelp("ctrl+c", "quit"),
),
Help: key.NewBinding(
key.WithKeys("ctrl+g"),
key.WithHelp("ctrl+g", "more"),
),
Commands: key.NewBinding(
key.WithKeys("ctrl+p"),
key.WithHelp("ctrl+p", "commands"),
),
Models: key.NewBinding(
key.WithKeys("ctrl+m", "ctrl+l"),
key.WithHelp("ctrl+l", "models"),
),
Suspend: key.NewBinding(
key.WithKeys("ctrl+z"),
key.WithHelp("ctrl+z", "suspend"),
),
Sessions: key.NewBinding(
key.WithKeys("ctrl+s"),
key.WithHelp("ctrl+s", "sessions"),
),
Tab: key.NewBinding(
key.WithKeys("tab"),
key.WithHelp("tab", "change focus"),
),
ToggleYolo: key.NewBinding(
key.WithKeys("ctrl+y"),
key.WithHelp("ctrl+y", "toggle yolo"),
),
}
km.Editor.AddFile = key.NewBinding(
key.WithKeys("/"),
key.WithHelp("/", "add file"),
)
km.Editor.SendMessage = key.NewBinding(
key.WithKeys("enter"),
key.WithHelp("enter", "send"),
)
km.Editor.OpenEditor = key.NewBinding(
key.WithKeys("ctrl+o"),
key.WithHelp("ctrl+o", "open editor"),
)
km.Editor.Newline = key.NewBinding(
key.WithKeys("shift+enter", "ctrl+j"),
// "ctrl+j" is a common keybinding for newline in many editors. If
// the terminal supports "shift+enter", we substitute the help tex
// to reflect that.
key.WithHelp("ctrl+j", "newline"),
)
km.Editor.AddImage = key.NewBinding(
key.WithKeys("ctrl+f"),
key.WithHelp("ctrl+f", "add image"),
)
km.Editor.PasteImage = key.NewBinding(
key.WithKeys("ctrl+v"),
key.WithHelp("ctrl+v", "paste image from clipboard"),
)
km.Editor.MentionFile = key.NewBinding(
key.WithKeys("@"),
key.WithHelp("@", "mention file"),
)
km.Editor.Commands = key.NewBinding(
key.WithKeys("/"),
key.WithHelp("/", "commands"),
)
km.Editor.AttachmentDeleteMode = key.NewBinding(
key.WithKeys("ctrl+r"),
key.WithHelp("ctrl+r+{i}", "delete attachment at index i"),
)
km.Editor.Escape = key.NewBinding(
key.WithKeys("esc", "alt+esc"),
key.WithHelp("esc", "cancel delete mode"),
)
km.Editor.DeleteAllAttachments = key.NewBinding(
key.WithKeys("r"),
key.WithHelp("ctrl+r+r", "delete all attachments"),
)
km.Editor.HistoryPrev = key.NewBinding(
key.WithKeys("up"),
)
km.Editor.HistoryNext = key.NewBinding(
key.WithKeys("down"),
)
km.Chat.NewSession = key.NewBinding(
key.WithKeys("ctrl+n"),
key.WithHelp("ctrl+n", "new session"),
)
km.Chat.AddAttachment = key.NewBinding(
key.WithKeys("ctrl+f"),
key.WithHelp("ctrl+f", "add attachment"),
)
km.Chat.Cancel = key.NewBinding(
key.WithKeys("esc", "alt+esc"),
key.WithHelp("esc", "cancel"),
)
km.Chat.Tab = key.NewBinding(
key.WithKeys("tab"),
key.WithHelp("tab", "change focus"),
)
km.Chat.Details = key.NewBinding(
key.WithKeys("ctrl+d"),
key.WithHelp("ctrl+d", "toggle details"),
)
km.Chat.TogglePills = key.NewBinding(
key.WithKeys("ctrl+t", "ctrl+space"),
key.WithHelp("ctrl+t", "toggle tasks"),
)
km.Chat.PillLeft = key.NewBinding(
key.WithKeys("left"),
key.WithHelp("←/→", "switch section"),
)
km.Chat.PillRight = key.NewBinding(
key.WithKeys("right"),
key.WithHelp("←/→", "switch section"),
)
km.Chat.Down = key.NewBinding(
key.WithKeys("down", "ctrl+j", "j"),
key.WithHelp("↓", "down"),
)
km.Chat.Up = key.NewBinding(
key.WithKeys("up", "ctrl+k", "k"),
key.WithHelp("↑", "up"),
)
km.Chat.UpDown = key.NewBinding(
key.WithKeys("up", "down"),
key.WithHelp("↑↓", "scroll"),
)
km.Chat.UpOneItem = key.NewBinding(
key.WithKeys("shift+up", "K"),
key.WithHelp("shift+↑", "up one item"),
)
km.Chat.DownOneItem = key.NewBinding(
key.WithKeys("shift+down", "J"),
key.WithHelp("shift+↓", "down one item"),
)
km.Chat.UpDownOneItem = key.NewBinding(
key.WithKeys("shift+up", "shift+down"),
key.WithHelp("shift+↑↓", "scroll one item"),
)
km.Chat.HalfPageDown = key.NewBinding(
key.WithKeys("d"),
key.WithHelp("d", "half page down"),
)
km.Chat.PageDown = key.NewBinding(
key.WithKeys("pgdown", " ", "f"),
key.WithHelp("f/pgdn", "page down"),
)
km.Chat.PageUp = key.NewBinding(
key.WithKeys("pgup", "b"),
key.WithHelp("b/pgup", "page up"),
)
km.Chat.HalfPageUp = key.NewBinding(
key.WithKeys("u"),
key.WithHelp("u", "half page up"),
)
km.Chat.Home = key.NewBinding(
key.WithKeys("g", "home"),
key.WithHelp("g", "home"),
)
km.Chat.End = key.NewBinding(
key.WithKeys("G", "end"),
key.WithHelp("G", "end"),
)
km.Chat.Copy = key.NewBinding(
key.WithKeys("c", "y", "C", "Y"),
key.WithHelp("c/y", "copy"),
)
km.Chat.ClearHighlight = key.NewBinding(
key.WithKeys("esc", "alt+esc"),
key.WithHelp("esc", "clear selection"),
)
km.Chat.Expand = key.NewBinding(
key.WithKeys("space"),
key.WithHelp("space", "expand/collapse"),
)
km.Initialize.Yes = key.NewBinding(
key.WithKeys("y", "Y"),
key.WithHelp("y", "yes"),
)
km.Initialize.No = key.NewBinding(
key.WithKeys("n", "N", "esc", "alt+esc"),
key.WithHelp("n", "no"),
)
km.Initialize.Switch = key.NewBinding(
key.WithKeys("left", "right", "tab"),
key.WithHelp("tab", "switch"),
)
km.Initialize.Enter = key.NewBinding(
key.WithKeys("enter"),
key.WithHelp("enter", "select"),
)
return km
}