#18502 · @Brendonovich · opened Mar 21, 2026 at 8:49 AM UTC · last updated Mar 21, 2026 at 8:49 AM UTC
app: allow navigating projects with keybinds
appfeat
57
+36−02 files
Score breakdown
Impact
6.0
Clarity
8.0
Urgency
4.0
Ease Of Review
4.0
Guidelines
6.0
Readiness
7.0
Size
9.0
Trust
10.0
Traction
0.0
Summary
This PR introduces new keyboard shortcuts for navigating between projects, specifically using cmd+option+arrow keybinds. It adds a quality-of-life feature for keyboard-centric users. The changes involve modifying i18n files and the main layout component.
Description
Adds discord-style cmd+option+array keybinds for navigating between projects
Linked Issues
None.
Comments
No comments.
Changed Files
packages/app/src/i18n/en.ts
+2−0@@ -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",
packages/app/src/pages/layout.tsx
+34−0@@ -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
@@ -1002,6 +1022,20 @@ export default function Layout(props: ParentProps) {
keybind: "mod+o",
onSelect: () => chooseProject(),
},
{
id: "project.previous",
title: language.t("command.project.previous"),
category: language.t(