diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx index 45786561077a..8198e279580c 100644 --- a/packages/app/src/components/titlebar.tsx +++ b/packages/app/src/components/titlebar.tsx @@ -28,6 +28,8 @@ import { tabKey, useTabs } from "@/context/tabs" import type { PromptSession } from "@/context/prompt" import "./titlebar.css" import { newTabTooltipKeybind } from "./command-tooltip-keybind" +import { useDirectoryPicker } from "@/components/directory-picker" +import { homeProjectDirectories } from "@/pages/layout/helpers" type TauriDesktopWindow = { startDragging?: () => Promise @@ -253,6 +255,7 @@ export function Titlebar(props: { update?: TitlebarUpdate; debugTools?: { visibl {(_) => { const layout = useLayout() const global = useGlobal() + const pickDirectory = useDirectoryPicker() const tabs = useTabs() const tabsStore = tabs.store @@ -373,6 +376,35 @@ export function Titlebar(props: { update?: TitlebarUpdate; debugTools?: { visibl } const toggleHome = () => tabs.toggleHome({ home: layout.route().type === "home", current: currentTab() }) + const chooseProject = () => { + const conn = server.current + if (!conn) return + pickDirectory({ + server: conn, + title: language.t("command.project.open"), + multiple: true, + onSelect: (result) => { + const directories = homeProjectDirectories(result) + const directory = directories[0] + if (!directory) return + const ctx = global.ensureServerCtx(conn) + directories.forEach((entry) => ctx.projects.open(entry)) + ctx.projects.touch(directory) + void tabs.newDraft({ server: ServerConnection.key(conn), directory }) + }, + }) + } + + command.register("titlebar-project", () => [ + { + id: "project.open", + title: language.t("command.project.open"), + category: language.t("command.category.project"), + keybind: "mod+o", + onSelect: chooseProject, + }, + ]) + command.register("titlebar-home", () => [ { id: "home.toggle", diff --git a/packages/app/src/pages/new-session.tsx b/packages/app/src/pages/new-session.tsx index d97f5779ec19..3ee08586a80f 100644 --- a/packages/app/src/pages/new-session.tsx +++ b/packages/app/src/pages/new-session.tsx @@ -126,6 +126,17 @@ export default function NewSessionPage() { keybind: "ctrl+l", onSelect: () => promptInputV2Controller.restoreFocus(), }, + { + id: "workspace.new", + title: language.t("workspace.new"), + category: language.t("command.category.workspace"), + keybind: "mod+shift+w", + disabled: !showWorkspaceBar(), + onSelect: () => { + setStore("worktree", "create") + promptInputV2Controller.restoreFocus() + }, + }, ]) createEffect(() => {