diff options
| author | Yihui Khuu <[email protected]> | 2025-08-15 21:20:07 +1000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-08-15 06:20:07 -0500 |
| commit | 92d4366a20b4499b8e4817df442d67d021949feb (patch) | |
| tree | 955d36b9911eb34ebc2deec1d5135cf56b25d2b4 /packages/tui/internal/app | |
| parent | 17a7c824b848240c777469ff670a1189445ba5bd (diff) | |
| download | opencode-92d4366a20b4499b8e4817df442d67d021949feb.tar.gz opencode-92d4366a20b4499b8e4817df442d67d021949feb.zip | |
feat(tui): support cycling recent models in reverse (#1953)
Diffstat (limited to 'packages/tui/internal/app')
| -rw-r--r-- | packages/tui/internal/app/app.go | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/packages/tui/internal/app/app.go b/packages/tui/internal/app/app.go index 023b799d5..eff00f296 100644 --- a/packages/tui/internal/app/app.go +++ b/packages/tui/internal/app/app.go @@ -290,7 +290,7 @@ func (a *App) SwitchAgentReverse() (*App, tea.Cmd) { return a.cycleMode(false) } -func (a *App) CycleRecentModel() (*App, tea.Cmd) { +func (a *App) cycleRecentModel(forward bool) (*App, tea.Cmd) { recentModels := a.State.RecentlyUsedModels if len(recentModels) > 5 { recentModels = recentModels[:5] @@ -299,15 +299,21 @@ func (a *App) CycleRecentModel() (*App, tea.Cmd) { return a, toast.NewInfoToast("Need at least 2 recent models to cycle") } nextIndex := 0 + prevIndex := 0 for i, recentModel := range recentModels { if a.Provider != nil && a.Model != nil && recentModel.ProviderID == a.Provider.ID && recentModel.ModelID == a.Model.ID { nextIndex = (i + 1) % len(recentModels) + prevIndex = (i - 1 + len(recentModels)) % len(recentModels) break } } + targetIndex := nextIndex + if !forward { + targetIndex = prevIndex + } for range recentModels { - currentRecentModel := recentModels[nextIndex%len(recentModels)] + currentRecentModel := recentModels[targetIndex%len(recentModels)] provider, model := findModelByProviderAndModelID( a.Providers, currentRecentModel.ProviderID, @@ -327,8 +333,8 @@ func (a *App) CycleRecentModel() (*App, tea.Cmd) { ) } recentModels = append( - recentModels[:nextIndex%len(recentModels)], - recentModels[nextIndex%len(recentModels)+1:]...) + recentModels[:targetIndex%len(recentModels)], + recentModels[targetIndex%len(recentModels)+1:]...) if len(recentModels) < 2 { a.State.RecentlyUsedModels = recentModels return a, tea.Sequence( @@ -341,6 +347,14 @@ func (a *App) CycleRecentModel() (*App, tea.Cmd) { return a, toast.NewErrorToast("Recent model not found") } +func (a *App) CycleRecentModel() (*App, tea.Cmd) { + return a.cycleRecentModel(true) +} + +func (a *App) CycleRecentModelReverse() (*App, tea.Cmd) { + return a.cycleRecentModel(false) +} + func (a *App) SwitchToAgent(agentName string) (*App, tea.Cmd) { // Find the agent index by name for i, agent := range a.Agents { |
