diff options
| author | Brendan Allan <[email protected]> | 2026-03-21 22:13:09 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-21 22:13:09 +0800 |
| commit | 9ad6588f3e0066125033810a5e0e4dc08f0c6961 (patch) | |
| tree | b11f63dc288f9c9cc9638caf5ef684c1795919ca | |
| parent | fb6bf0b35e623113d23d15cc1a12b28fedd31f88 (diff) | |
| download | opencode-9ad6588f3e0066125033810a5e0e4dc08f0c6961.tar.gz opencode-9ad6588f3e0066125033810a5e0e4dc08f0c6961.zip | |
app: allow navigating projects with keybinds (#18502)
| -rw-r--r-- | packages/app/src/i18n/en.ts | 2 | ||||
| -rw-r--r-- | packages/app/src/pages/layout.tsx | 34 |
2 files changed, 36 insertions, 0 deletions
diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 72caed40a..8efd9d3bc 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -23,6 +23,8 @@ export const dict = { "command.sidebar.toggle": "Toggle sidebar", "command.project.open": "Open project", + "command.project.previous": "Previous project", + "command.project.next": "Next project", "command.provider.connect": "Connect provider", "command.server.switch": "Switch server", "command.settings.open": "Open settings", diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 8e2248469..2adcd3b56 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -936,6 +936,26 @@ export default function Layout(props: ParentProps) { navigateToSession(session) } + function navigateProjectByOffset(offset: number) { + const projects = layout.projects.list() + if (projects.length === 0) return + + const current = currentProject()?.worktree + const fallback = currentDir() ? projectRoot(currentDir()) : undefined + const active = current ?? fallback + const index = active ? projects.findIndex((project) => project.worktree === active) : -1 + + const target = + index === -1 + ? offset > 0 + ? projects[0] + : projects[projects.length - 1] + : projects[(index + offset + projects.length) % projects.length] + if (!target) return + + openProject(target.worktree) + } + function navigateSessionByUnseen(offset: number) { const sessions = currentSessions() if (sessions.length === 0) return @@ -1003,6 +1023,20 @@ export default function Layout(props: ParentProps) { onSelect: () => chooseProject(), }, { + id: "project.previous", + title: language.t("command.project.previous"), + category: language.t("command.category.project"), + keybind: "mod+alt+arrowup", + onSelect: () => navigateProjectByOffset(-1), + }, + { + id: "project.next", + title: language.t("command.project.next"), + category: language.t("command.category.project"), + keybind: "mod+alt+arrowdown", + onSelect: () => navigateProjectByOffset(1), + }, + { id: "provider.connect", title: language.t("command.provider.connect"), category: language.t("command.category.provider"), |
