ニワトリのたまご

宇宙とソフトウェア開発

Mac版のElectronでコピー&ペーストができない件を解決した

MacでElectronを使ったアプリを開発していますが、テキストボックス等でコピー&ペーストが効かないことがわかりました。 以下のサイトにあるように、Mac版のElectronアプリだとできないもんらしいです。 tech.kurojica.com

私の場合は以下のエラーが出て素直に実装できませんでした。

'selector' は型 'MenuItemConstructorOptions' に存在しません。

MenuItemConstructorOptionsにselectorというキーワードを足してやる必要があるようです。 以下のサイトではMenuItemConstructorOptionsを継承してselectorを追加しています。

qiita.com

この辺りを参考に私の環境では以下のようにすると無事Mac環境でもコピー&ペーストできました。

import { Menu, MenuItem } from "electron";
import { MenuItemConstructorOptions } from "electron/main";

const template: Array<MenuItemConstructorOptions | DarwinMenuItemConstructorOptions | MenuItem> = [];
interface DarwinMenuItemConstructorOptions extends MenuItemConstructorOptions {
  selector?: string;
  submenu?: DarwinMenuItemConstructorOptions[] | Menu;
}
template.push({
  label: "Edit",
  submenu: [
    { label: "Undo", accelerator: "CmdOrCtrl+Z", selector: "undo:" },
    { label: "Redo", accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" },
    { type: "separator" },
    { label: "Cut", accelerator: "CmdOrCtrl+X", selector: "cut:" },
    { label: "Copy", accelerator: "CmdOrCtrl+C", selector: "copy:" },
    { label: "Paste", accelerator: "CmdOrCtrl+V", selector: "paste:" },
    { label: "Select All", accelerator: "CmdOrCtrl+A", selector: "selectAll:" },
  ],
});
export const appMenu = Menu.buildFromTemplate(template);