diff --git a/internal/tui/components/dialogs/commands/commands.go b/internal/tui/components/dialogs/commands/commands.go index 664158fc3..872b18065 100644 --- a/internal/tui/components/dialogs/commands/commands.go +++ b/internal/tui/components/dialogs/commands/commands.go @@ -281,6 +281,7 @@ func (c *commandDialogCmp) defaultCommands() []Command { ID: "switch_model", Title: "Switch Model", Description: "Switch to a different model", + Shortcut: "ctrl+l", Handler: func(cmd Command) tea.Cmd { return util.CmdHandler(SwitchModelMsg{}) }, diff --git a/internal/tui/keys.go b/internal/tui/keys.go index d618063e1..a6a22758a 100644 --- a/internal/tui/keys.go +++ b/internal/tui/keys.go @@ -9,6 +9,7 @@ type KeyMap struct { Help key.Binding Commands key.Binding Suspend key.Binding + Models key.Binding Sessions key.Binding pageBindings []key.Binding @@ -32,6 +33,10 @@ func DefaultKeyMap() KeyMap { key.WithKeys("ctrl+z"), key.WithHelp("ctrl+z", "suspend"), ), + Models: key.NewBinding( + key.WithKeys("ctrl+l", "ctrl+m"), + key.WithHelp("ctrl+l", "models"), + ), Sessions: key.NewBinding( key.WithKeys("ctrl+s"), key.WithHelp("ctrl+s", "sessions"), diff --git a/internal/tui/page/chat/chat.go b/internal/tui/page/chat/chat.go index 291892506..8ef0d7817 100644 --- a/internal/tui/page/chat/chat.go +++ b/internal/tui/page/chat/chat.go @@ -927,11 +927,18 @@ func (p *chatPage) Help() help.KeyMap { key.WithKeys("ctrl+p"), key.WithHelp("ctrl+p", "commands"), ) + modelsBinding := key.NewBinding( + key.WithKeys("ctrl+m", "ctrl+l"), + key.WithHelp("ctrl+l", "models"), + ) + if p.keyboardEnhancements.SupportsKeyDisambiguation() { + modelsBinding.SetHelp("ctrl+m", "models") + } helpBinding := key.NewBinding( key.WithKeys("ctrl+g"), key.WithHelp("ctrl+g", "more"), ) - globalBindings = append(globalBindings, commandsBinding) + globalBindings = append(globalBindings, commandsBinding, modelsBinding) globalBindings = append(globalBindings, key.NewBinding( key.WithKeys("ctrl+s"), @@ -948,6 +955,7 @@ func (p *chatPage) Help() help.KeyMap { shortList = append(shortList, // Commands commandsBinding, + modelsBinding, ) fullList = append(fullList, globalBindings) diff --git a/internal/tui/tui.go b/internal/tui/tui.go index 26d23f46e..cb1c1f675 100644 --- a/internal/tui/tui.go +++ b/internal/tui/tui.go @@ -104,6 +104,9 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyboardEnhancementsMsg: + if msg.SupportsKeyDisambiguation() { + a.keyMap.Models.SetHelp("ctrl+m", "models") + } for id, page := range a.pages { m, pageCmd := page.Update(msg) if model, ok := m.(util.Model); ok { @@ -459,6 +462,20 @@ func (a *appModel) handleKeyPressMsg(msg tea.KeyPressMsg) tea.Cmd { return util.CmdHandler(dialogs.OpenDialogMsg{ Model: commands.NewCommandDialog(a.selectedSessionID), }) + case key.Matches(msg, a.keyMap.Models): + // if the app is not configured show no models + if !a.isConfigured { + return nil + } + if a.dialog.ActiveDialogID() == models.ModelsDialogID { + return util.CmdHandler(dialogs.CloseDialogMsg{}) + } + if a.dialog.HasDialogs() { + return nil + } + return util.CmdHandler(dialogs.OpenDialogMsg{ + Model: models.NewModelDialogCmp(), + }) case key.Matches(msg, a.keyMap.Sessions): // if the app is not configured show no sessions if !a.isConfigured { @@ -471,10 +488,6 @@ func (a *appModel) handleKeyPressMsg(msg tea.KeyPressMsg) tea.Cmd { return nil } var cmds []tea.Cmd - if a.dialog.ActiveDialogID() == commands.CommandsDialogID { - // If the commands dialog is open, close it first - cmds = append(cmds, util.CmdHandler(dialogs.CloseDialogMsg{})) - } cmds = append(cmds, func() tea.Msg { allSessions, _ := a.app.Sessions.List(context.Background())