Unverified 提交 f46cdf7a authored 作者: Will Chen's avatar Will Chen 提交者: GitHub

Add application menu for keyboard shortcuts (Ctrl+C, Ctrl+Z, etc.) (#2335)

## Summary - Adds an application menu with Edit, View, and Window submenus to enable standard keyboard shortcuts - Fixes #1952: Users can now use Cmd/Ctrl+C, Cmd/Ctrl+V, Cmd/Ctrl+Z, Cmd/Ctrl+X, Cmd/Ctrl+A instead of right-clicking - The Edit menu provides: Undo, Redo, Cut, Copy, Paste, Delete, Select All ## Test plan 1. Start the app 2. Click in the chat input field and type some text 3. Test Ctrl/Cmd+A (Select All) - should select all text 4. Test Ctrl/Cmd+C (Copy) - should copy selected text 5. Test Ctrl/Cmd+V (Paste) - should paste clipboard content 6. Test Ctrl/Cmd+Z (Undo) - should undo last action 7. Test Ctrl/Cmd+Shift+Z or Ctrl+Y (Redo) - should redo undone action 8. Test Ctrl/Cmd+X (Cut) - should cut selected text 9. Verify right-click context menu still works as before 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2335"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1"> <img src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1" alt="Open with Devin"> </picture> </a> <!-- devin-review-badge-end --> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Introduces a global application menu to enable OS-standard keyboard shortcuts and window/view controls. > > - Adds `createApplicationMenu` in `src/main.ts` with `Edit`, `View`, and `Window` menus (plus macOS `App` menu) providing `undo/redo`, `cut/copy/paste/delete/selectAll`, zoom controls, reload, devtools, and fullscreen > - Calls `createApplicationMenu()` during startup after `createWindow()` to activate shortcuts across the app > - Leaves existing right-click context menu behavior intact > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit fbd07b8dc49d8ee97f98526ac1d654701734c038. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Adds an application menu to enable standard keyboard shortcuts (Undo, Redo, Cut, Copy, Paste, Select All) across the app. Fixes #1952 so users can use Cmd/Ctrl shortcuts instead of relying on the context menu. - **New Features** - Create and set application menu on startup with Edit, View, and Window menus. - Edit menu wires Undo, Redo, Cut, Copy, Paste, Delete, Select All via Electron roles. - Includes macOS app menu (About, Services, Hide, Quit); Windows/Linux use Window -> Close. <sup>Written for commit f2499679fb571476cec5f74a2e5a23c3447512c3. Summary will update on new commits.</sup> <!-- End of auto-generated description by cubic. --> --------- Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com> Co-authored-by: 's avatarclaude[bot] <41898282+claude[bot]@users.noreply.github.com>
上级 4ce56cd8
...@@ -122,6 +122,7 @@ export async function onReady() { ...@@ -122,6 +122,7 @@ export async function onReady() {
await onFirstRunMaybe(settings); await onFirstRunMaybe(settings);
createWindow(); createWindow();
createApplicationMenu();
logger.info("Auto-update enabled=", settings.enableAutoUpdate); logger.info("Auto-update enabled=", settings.enableAutoUpdate);
if (settings.enableAutoUpdate) { if (settings.enableAutoUpdate) {
...@@ -297,6 +298,87 @@ const createWindow = () => { ...@@ -297,6 +298,87 @@ const createWindow = () => {
}); });
}; };
/**
* Create application menu with Edit shortcuts (Undo, Redo, Cut, Copy, Paste, etc.)
* This enables standard keyboard shortcuts like Cmd/Ctrl+C, Cmd/Ctrl+V, etc.
*/
const createApplicationMenu = () => {
const isMac = process.platform === "darwin";
const template: Electron.MenuItemConstructorOptions[] = [
// App menu (macOS only)
...(isMac
? [
{
label: app.name,
submenu: [
{ role: "about" as const },
{ type: "separator" as const },
{ role: "services" as const },
{ type: "separator" as const },
{ role: "hide" as const },
{ role: "hideOthers" as const },
{ role: "unhide" as const },
{ type: "separator" as const },
{ role: "quit" as const },
],
},
]
: []),
// Edit menu - enables keyboard shortcuts for clipboard operations
{
label: "Edit",
submenu: [
{ role: "undo" as const },
{ role: "redo" as const },
{ type: "separator" as const },
{ role: "cut" as const },
{ role: "copy" as const },
{ role: "paste" as const },
{ role: "delete" as const },
{ type: "separator" as const },
{ role: "selectAll" as const },
],
},
// View menu
{
label: "View",
submenu: [
{ role: "reload" as const },
{ role: "forceReload" as const },
...(process.env.NODE_ENV === "development"
? [{ role: "toggleDevTools" as const }]
: []),
{ type: "separator" as const },
{ role: "resetZoom" as const },
{ role: "zoomIn" as const },
{ role: "zoomOut" as const },
{ type: "separator" as const },
{ role: "togglefullscreen" as const },
],
},
// Window menu
{
label: "Window",
submenu: [
{ role: "minimize" as const },
{ role: "zoom" as const },
...(isMac
? [
{ type: "separator" as const },
{ role: "front" as const },
{ type: "separator" as const },
{ role: "window" as const },
]
: [{ role: "close" as const }]),
],
},
];
const appMenu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(appMenu);
};
const gotTheLock = app.requestSingleInstanceLock(); const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) { if (!gotTheLock) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论