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 MentionFile key.Binding // Attachments key maps AttachmentDeleteMode key.Binding Escape key.Binding DeleteAllAttachments key.Binding } Chat struct { NewSession key.Binding AddAttachment key.Binding Cancel key.Binding Tab key.Binding Details key.Binding Down key.Binding Up key.Binding DownOneItem key.Binding UpOneItem key.Binding PageDown key.Binding PageUp key.Binding HalfPageDown key.Binding HalfPageUp key.Binding Home key.Binding End 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 } 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"), ), } 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.MentionFile = key.NewBinding( key.WithKeys("@"), key.WithHelp("@", "mention file"), ) 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.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.Down = key.NewBinding( key.WithKeys("down", "ctrl+j", "ctrl+n", "j"), key.WithHelp("↓", "down"), ) km.Chat.Up = key.NewBinding( key.WithKeys("up", "ctrl+k", "ctrl+p", "k"), key.WithHelp("↑", "up"), ) 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.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.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 }