menu.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { Menu, MenuItem, PredefinedMenuItem, Submenu } from "@tauri-apps/api/menu"
  2. import { type as ostype } from "@tauri-apps/plugin-os"
  3. import { runUpdater, UPDATER_ENABLED } from "./updater"
  4. import { installCli } from "./cli"
  5. export async function createMenu() {
  6. if (ostype() !== "macos") return
  7. const menu = await Menu.new({
  8. items: [
  9. await Submenu.new({
  10. text: "OpenCode",
  11. items: [
  12. await PredefinedMenuItem.new({
  13. item: { About: null },
  14. }),
  15. await MenuItem.new({
  16. enabled: UPDATER_ENABLED,
  17. action: () => runUpdater({ alertOnFail: true }),
  18. text: "Check For Updates...",
  19. }),
  20. await MenuItem.new({
  21. action: () => installCli(),
  22. text: "Install CLI...",
  23. }),
  24. await PredefinedMenuItem.new({
  25. item: "Separator",
  26. }),
  27. await PredefinedMenuItem.new({
  28. item: "Hide",
  29. }),
  30. await PredefinedMenuItem.new({
  31. item: "HideOthers",
  32. }),
  33. await PredefinedMenuItem.new({
  34. item: "ShowAll",
  35. }),
  36. await PredefinedMenuItem.new({
  37. item: "Separator",
  38. }),
  39. await PredefinedMenuItem.new({
  40. item: "Quit",
  41. }),
  42. ].filter(Boolean),
  43. }),
  44. // await Submenu.new({
  45. // text: "File",
  46. // items: [
  47. // await MenuItem.new({
  48. // enabled: false,
  49. // text: "Open Project...",
  50. // }),
  51. // await PredefinedMenuItem.new({
  52. // item: "Separator"
  53. // }),
  54. // await MenuItem.new({
  55. // enabled: false,
  56. // text: "New Session",
  57. // }),
  58. // await PredefinedMenuItem.new({
  59. // item: "Separator"
  60. // }),
  61. // await MenuItem.new({
  62. // enabled: false,
  63. // text: "Close Project",
  64. // })
  65. // ]
  66. // }),
  67. await Submenu.new({
  68. text: "Edit",
  69. items: [
  70. await PredefinedMenuItem.new({
  71. item: "Undo",
  72. }),
  73. await PredefinedMenuItem.new({
  74. item: "Redo",
  75. }),
  76. await PredefinedMenuItem.new({
  77. item: "Separator",
  78. }),
  79. await PredefinedMenuItem.new({
  80. item: "Cut",
  81. }),
  82. await PredefinedMenuItem.new({
  83. item: "Copy",
  84. }),
  85. await PredefinedMenuItem.new({
  86. item: "Paste",
  87. }),
  88. await PredefinedMenuItem.new({
  89. item: "SelectAll",
  90. }),
  91. ],
  92. }),
  93. ],
  94. })
  95. menu.setAsAppMenu()
  96. }