summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/menu.ts
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-02-06 18:10:48 +0800
committerBrendan Allan <[email protected]>2026-02-06 18:10:48 +0800
commite0e32ed3a846be03f66d2f48e2b2659a9e658a11 (patch)
treebe2b6430e46a9a8561f8ad8c87f7d7bbbccd1949 /packages/desktop/src/menu.ts
parent9b20679a610af778e4f0fb741baed524edb2514a (diff)
downloadopencode-e0e32ed3a846be03f66d2f48e2b2659a9e658a11.tar.gz
opencode-e0e32ed3a846be03f66d2f48e2b2659a9e658a11.zip
desktop: add more basic menu bar items
Diffstat (limited to 'packages/desktop/src/menu.ts')
-rw-r--r--packages/desktop/src/menu.ts118
1 files changed, 94 insertions, 24 deletions
diff --git a/packages/desktop/src/menu.ts b/packages/desktop/src/menu.ts
index d41084404..9af6d2b84 100644
--- a/packages/desktop/src/menu.ts
+++ b/packages/desktop/src/menu.ts
@@ -1,13 +1,14 @@
import { Menu, MenuItem, PredefinedMenuItem, Submenu } from "@tauri-apps/api/menu"
import { type as ostype } from "@tauri-apps/plugin-os"
import { relaunch } from "@tauri-apps/plugin-process"
+import { openUrl } from "@tauri-apps/plugin-opener"
import { runUpdater, UPDATER_ENABLED } from "./updater"
import { installCli } from "./cli"
import { initI18n, t } from "./i18n"
import { commands } from "./bindings"
-export async function createMenu() {
+export async function createMenu(trigger: (id: string) => void) {
if (ostype() !== "macos") return
await initI18n()
@@ -60,29 +61,25 @@ export async function createMenu() {
}),
].filter(Boolean),
}),
- // await Submenu.new({
- // text: "File",
- // items: [
- // await MenuItem.new({
- // enabled: false,
- // text: "Open Project...",
- // }),
- // await PredefinedMenuItem.new({
- // item: "Separator"
- // }),
- // await MenuItem.new({
- // enabled: false,
- // text: "New Session",
- // }),
- // await PredefinedMenuItem.new({
- // item: "Separator"
- // }),
- // await MenuItem.new({
- // enabled: false,
- // text: "Close Project",
- // })
- // ]
- // }),
+ await Submenu.new({
+ text: "File",
+ items: [
+ await MenuItem.new({
+ text: "New Session",
+ action: () => trigger("session.new"),
+ }),
+ await MenuItem.new({
+ text: "Open Project...",
+ action: () => trigger("project.open"),
+ }),
+ await PredefinedMenuItem.new({
+ item: "Separator",
+ }),
+ await PredefinedMenuItem.new({
+ item: "CloseWindow",
+ }),
+ ],
+ }),
await Submenu.new({
text: "Edit",
items: [
@@ -109,6 +106,79 @@ export async function createMenu() {
}),
],
}),
+ await Submenu.new({
+ text: "View",
+ items: [
+ await MenuItem.new({
+ action: () => trigger("sidebar.toggle"),
+ text: "Toggle Sidebar",
+ }),
+ await MenuItem.new({
+ action: () => trigger("terminal.toggle"),
+ text: "Toggle Terminal",
+ }),
+ await MenuItem.new({
+ action: () => trigger("fileTree.toggle"),
+ text: "Toggle File Tree",
+ }),
+ await PredefinedMenuItem.new({
+ item: "Separator",
+ }),
+ await MenuItem.new({
+ action: () => trigger("common.goBack"),
+ text: "Back",
+ }),
+ await MenuItem.new({
+ action: () => trigger("common.goForward"),
+ text: "Forward",
+ }),
+ await PredefinedMenuItem.new({
+ item: "Separator",
+ }),
+ await MenuItem.new({
+ action: () => trigger("session.next"),
+ text: "Previous Session",
+ }),
+ await MenuItem.new({
+ action: () => trigger("session.previous"),
+ text: "Next Session",
+ }),
+ await PredefinedMenuItem.new({
+ item: "Separator",
+ }),
+ ],
+ }),
+ await Submenu.new({
+ text: "Help",
+ items: [
+ // missing native macos search
+ await MenuItem.new({
+ action: () => openUrl("https://opencode.ai/docs"),
+ text: "OpenCode Documentation",
+ }),
+ await MenuItem.new({
+ action: () => openUrl("https://discord.com/invite/opencode"),
+ text: "Support Forum",
+ }),
+ await PredefinedMenuItem.new({
+ item: "Separator",
+ }),
+ // await MenuItem.new({
+ // text: "Release Notes",
+ // }),
+ await PredefinedMenuItem.new({
+ item: "Separator",
+ }),
+ await MenuItem.new({
+ action: () => openUrl("https://github.com/anomalyco/opencode/issues/new?template=feature_request.yml"),
+ text: "Share Feedback",
+ }),
+ await MenuItem.new({
+ action: () => openUrl("https://github.com/anomalyco/opencode/issues/new?template=bug_report.yml"),
+ text: "Report a Bug",
+ }),
+ ],
+ }),
],
})
menu.setAsAppMenu()