diff --git a/src/main/main.ts b/src/main/main.ts index 53bcd71..065e957 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -13,6 +13,7 @@ import { terminalManager } from "./pty"; import path from "node:path"; import started from "electron-squirrel-startup"; import { setupLangServer } from "./langserver"; +import { setMenu } from "./menu"; /// // Handle creating/removing shortcuts on Windows when installing/uninstalling. @@ -21,6 +22,7 @@ if (started) { } app.setName("miller"); +setMenu(); const createWindow = () => { // Create the browser window. diff --git a/src/main/menu.ts b/src/main/menu.ts new file mode 100644 index 0000000..725f77e --- /dev/null +++ b/src/main/menu.ts @@ -0,0 +1,114 @@ +const { shell } = require("electron/common"); +const { app, Menu } = require("electron/main"); + +const isMac = process.platform === "darwin"; +const menuTemplate = [ + // { role: 'appMenu' } + ...(isMac + ? [ + { + label: app.name, + submenu: [ + { role: "about" }, + { type: "separator" }, + { role: "services" }, + { type: "separator" }, + { role: "hide" }, + { role: "hideOthers" }, + { role: "unhide" }, + { type: "separator" }, + { role: "quit" }, + ], + }, + ] + : []), + // { role: 'fileMenu' } + { + label: "File", + submenu: [isMac ? { role: "close" } : { role: "quit" }], + }, + // { role: 'editMenu' } + // { + // label: "Edit", + // submenu: [ + // { role: "undo" }, + // { role: "redo" }, + // { type: "separator" }, + // { role: "cut" }, + // { role: "copy" }, + // { role: "paste" }, + // ...(isMac + // ? [ + // { role: "pasteAndMatchStyle" }, + // { role: "delete" }, + // { role: "selectAll" }, + // { type: "separator" }, + // { + // label: "Speech", + // submenu: [ + // { role: "startSpeaking" }, + // { role: "stopSpeaking" }, + // ], + // }, + // ] + // : [ + // { role: "delete" }, + // { type: "separator" }, + // { role: "selectAll" }, + // ]), + // ], + // }, + // { role: 'viewMenu' } + { + label: "View", + submenu: [ + { role: "toggleDevTools" }, + { type: "separator" }, + { role: "resetZoom" }, + { role: "zoomIn" }, + { role: "zoomOut" }, + { type: "separator" }, + { role: "togglefullscreen" }, + ], + }, + // { role: 'windowMenu' } + { + label: "Window", + submenu: [ + { role: "minimize" }, + { role: "zoom" }, + ...(isMac + ? [ + { type: "separator" }, + { role: "front" }, + { type: "separator" }, + { role: "window" }, + ] + : []), + ], + }, + { + role: "help", + submenu: [ + { + label: "Learn More", + click: async () => { + const { shell } = require("electron"); + await shell.openExternal("https://electronjs.org"); + }, + }, + ...(!isMac + ? [ + { + role: "about", + }, + ] + : []), + ], + }, +]; + +export function setMenu() { + const menu = Menu.buildFromTemplate(menuTemplate); + Menu.setApplicationMenu(menu); +}