Switch projects from New Workspace with ⌘P/Ctrl+P (#2110)

* feat(app): add ⌘P shortcut to switch project on New Workspace screen

Opens the existing project picker with its search focused so the project
can be switched from the keyboard (type + Enter) instead of clicking the
badge and then the project.

Wires a new "workspace.project.pick" action through the standard keyboard
pipeline (binding -> route passthrough -> dispatcher), handled by a
screen-scoped handler on the New Workspace screen that is only registered
while the screen is mounted and there are projects to pick. Because
preventDefault only fires when a handler handles the key, ⌘P/Ctrl+P still
triggers native print everywhere else. Adds a Settings -> Shortcuts help
row (rebindable) and the "Switch project" label across all locales.

* test(app): cover project picker shortcut

---------

Co-authored-by: Mohamed Boudra <boudra.moha@gmail.com>
This commit is contained in:
Saravjeet 'Aman' Singh
2026-07-28 00:32:41 +02:00
committed by GitHub
co-authored by Mohamed Boudra
parent b55acfc60f
commit f8dd0fc2e0
17 changed files with 105 additions and 0 deletions
+1
View File
@@ -1831,6 +1831,7 @@ export const ar: TranslationResources = {
sendMessage: "أرسل رسالة",
queueMessage: "رسالة قائمة الانتظار",
muteUnmuteVoiceMode: "كتم وضع الصوت /unmute",
switchProject: "تبديل المشروع",
},
helpNotes: {
showKeyboardShortcuts: "متاح عندما لا يكون التركيز في حقل نص أو محطة طرفية.",
+1
View File
@@ -1841,6 +1841,7 @@ export const en = {
sendMessage: "Send message",
queueMessage: "Queue message",
muteUnmuteVoiceMode: "Mute/unmute voice mode",
switchProject: "Switch project",
},
helpNotes: {
showKeyboardShortcuts: "Available when focus is not in a text field or terminal.",
+1
View File
@@ -1879,6 +1879,7 @@ export const es: TranslationResources = {
sendMessage: "enviar mensaje",
queueMessage: "mensaje de cola",
muteUnmuteVoiceMode: "Silenciar el modo de voz/unmute",
switchProject: "Cambiar proyecto",
},
helpNotes: {
showKeyboardShortcuts: "Disponible cuando el foco no está en un campo de texto o terminal.",
+1
View File
@@ -1881,6 +1881,7 @@ export const fr: TranslationResources = {
sendMessage: "Envoyer un message",
queueMessage: "Message de file d'attente",
muteUnmuteVoiceMode: "Mode vocal/unmutemuet",
switchProject: "Changer de projet",
},
helpNotes: {
showKeyboardShortcuts:
+1
View File
@@ -1847,6 +1847,7 @@ export const ja: TranslationResources = {
sendMessage: "メッセージを送信",
queueMessage: "メッセージをキューに追加",
muteUnmuteVoiceMode: "音声モードのミュートを切り替え",
switchProject: "プロジェクトを切り替え",
},
helpNotes: {
showKeyboardShortcuts:
+1
View File
@@ -1862,6 +1862,7 @@ export const ptBR: TranslationResources = {
sendMessage: "Enviar mensagem",
queueMessage: "Enfileirar mensagem",
muteUnmuteVoiceMode: "Silenciar/ativar modo de voz",
switchProject: "Trocar projeto",
},
helpNotes: {
showKeyboardShortcuts:
+1
View File
@@ -1869,6 +1869,7 @@ export const ru: TranslationResources = {
sendMessage: "Отправить сообщение",
queueMessage: "Сообщение в очереди",
muteUnmuteVoiceMode: "Отключить голосовой режим /unmute",
switchProject: "Сменить проект",
},
helpNotes: {
showKeyboardShortcuts: "Доступно, когда фокус находится не в текстовом поле или терминале.",
+1
View File
@@ -1810,6 +1810,7 @@ export const zhCN: TranslationResources = {
sendMessage: "发送消息",
queueMessage: "消息排队",
muteUnmuteVoiceMode: "静音/取消静音语音模式",
switchProject: "切换项目",
},
helpNotes: {
showKeyboardShortcuts: "焦点不在文本输入框或终端内时可用。",