1use gpui::{Menu, MenuItem, OsAction};
2
3#[cfg(target_os = "macos")]
4pub fn menus() -> Vec<Menu<'static>> {
5 vec![
6 Menu {
7 name: "Zed",
8 items: vec![
9 MenuItem::action("About Zed…", super::About),
10 MenuItem::action("Check for Updates", auto_update::Check),
11 MenuItem::separator(),
12 MenuItem::submenu(Menu {
13 name: "Preferences",
14 items: vec![
15 MenuItem::action("Open Settings", workspace::OpenSettings),
16 MenuItem::action("Open Key Bindings", super::OpenKeymap),
17 MenuItem::action("Open Default Settings", super::OpenDefaultSettings),
18 MenuItem::action("Open Default Key Bindings", super::OpenDefaultKeymap),
19 MenuItem::action("Select Theme", theme_selector::Toggle),
20 ],
21 }),
22 MenuItem::action("Install CLI", install_cli::Install),
23 MenuItem::separator(),
24 MenuItem::action("Hide Zed", super::Hide),
25 MenuItem::action("Hide Others", super::HideOthers),
26 MenuItem::action("Show All", super::ShowAll),
27 MenuItem::action("Quit", super::Quit),
28 ],
29 },
30 Menu {
31 name: "File",
32 items: vec![
33 MenuItem::action("New", workspace::NewFile),
34 MenuItem::action("New Window", workspace::NewWindow),
35 MenuItem::separator(),
36 MenuItem::action("Open…", workspace::Open),
37 MenuItem::action("Open Recent...", recent_projects::OpenRecent),
38 MenuItem::separator(),
39 MenuItem::action("Add Folder to Project…", workspace::AddFolderToProject),
40 MenuItem::action("Save", workspace::Save),
41 MenuItem::action("Save As…", workspace::SaveAs),
42 MenuItem::action("Save All", workspace::SaveAll),
43 MenuItem::action("Close Editor", workspace::CloseActiveItem),
44 MenuItem::action("Close Window", workspace::CloseWindow),
45 ],
46 },
47 Menu {
48 name: "Edit",
49 items: vec![
50 MenuItem::os_action("Undo", editor::Undo, OsAction::Undo),
51 MenuItem::os_action("Redo", editor::Redo, OsAction::Redo),
52 MenuItem::separator(),
53 MenuItem::os_action("Cut", editor::Cut, OsAction::Cut),
54 MenuItem::os_action("Copy", editor::Copy, OsAction::Copy),
55 MenuItem::os_action("Paste", editor::Paste, OsAction::Paste),
56 MenuItem::separator(),
57 MenuItem::action("Find", search::buffer_search::Deploy { focus: true }),
58 MenuItem::action("Find In Project", workspace::NewSearch),
59 MenuItem::separator(),
60 MenuItem::action("Toggle Line Comment", editor::ToggleComments::default()),
61 MenuItem::action("Emoji & Symbols", editor::ShowCharacterPalette),
62 ],
63 },
64 Menu {
65 name: "Selection",
66 items: vec![
67 MenuItem::os_action("Select All", editor::SelectAll, OsAction::SelectAll),
68 MenuItem::action("Expand Selection", editor::SelectLargerSyntaxNode),
69 MenuItem::action("Shrink Selection", editor::SelectSmallerSyntaxNode),
70 MenuItem::separator(),
71 MenuItem::action("Add Cursor Above", editor::AddSelectionAbove),
72 MenuItem::action("Add Cursor Below", editor::AddSelectionBelow),
73 MenuItem::action(
74 "Select Next Occurrence",
75 editor::SelectNext {
76 replace_newest: false,
77 },
78 ),
79 MenuItem::separator(),
80 MenuItem::action("Move Line Up", editor::MoveLineUp),
81 MenuItem::action("Move Line Down", editor::MoveLineDown),
82 MenuItem::action("Duplicate Selection", editor::DuplicateLine),
83 ],
84 },
85 Menu {
86 name: "View",
87 items: vec![
88 MenuItem::action("Zoom In", super::IncreaseBufferFontSize),
89 MenuItem::action("Zoom Out", super::DecreaseBufferFontSize),
90 MenuItem::action("Reset Zoom", super::ResetBufferFontSize),
91 MenuItem::separator(),
92 MenuItem::action("Toggle Left Sidebar", workspace::ToggleLeftSidebar),
93 MenuItem::submenu(Menu {
94 name: "Editor Layout",
95 items: vec![
96 MenuItem::action("Split Up", workspace::SplitUp),
97 MenuItem::action("Split Down", workspace::SplitDown),
98 MenuItem::action("Split Left", workspace::SplitLeft),
99 MenuItem::action("Split Right", workspace::SplitRight),
100 ],
101 }),
102 MenuItem::separator(),
103 MenuItem::action("Project Panel", project_panel::ToggleFocus),
104 MenuItem::action("Command Palette", command_palette::Toggle),
105 MenuItem::action("Diagnostics", diagnostics::Deploy),
106 MenuItem::separator(),
107 ],
108 },
109 Menu {
110 name: "Go",
111 items: vec![
112 MenuItem::action("Back", workspace::GoBack { pane: None }),
113 MenuItem::action("Forward", workspace::GoForward { pane: None }),
114 MenuItem::separator(),
115 MenuItem::action("Go to File", file_finder::Toggle),
116 MenuItem::action("Go to Symbol in Project", project_symbols::Toggle),
117 MenuItem::action("Go to Symbol in Editor", outline::Toggle),
118 MenuItem::action("Go to Definition", editor::GoToDefinition),
119 MenuItem::action("Go to Type Definition", editor::GoToTypeDefinition),
120 MenuItem::action("Find All References", editor::FindAllReferences),
121 MenuItem::action("Go to Line/Column", go_to_line::Toggle),
122 MenuItem::separator(),
123 MenuItem::action("Next Problem", editor::GoToDiagnostic),
124 MenuItem::action("Previous Problem", editor::GoToPrevDiagnostic),
125 ],
126 },
127 Menu {
128 name: "Window",
129 items: vec![
130 MenuItem::action("Minimize", super::Minimize),
131 MenuItem::action("Zoom", super::Zoom),
132 MenuItem::separator(),
133 ],
134 },
135 Menu {
136 name: "Help",
137 items: vec![
138 MenuItem::action("Command Palette", command_palette::Toggle),
139 MenuItem::separator(),
140 MenuItem::action("View Telemetry", crate::OpenTelemetryLog),
141 MenuItem::action("View Dependency Licenses", crate::OpenLicenses),
142 MenuItem::action("Show Welcome", workspace::Welcome),
143 MenuItem::separator(),
144 MenuItem::action("Give us feedback", feedback::feedback_editor::GiveFeedback),
145 MenuItem::action(
146 "Copy System Specs Into Clipboard",
147 feedback::CopySystemSpecsIntoClipboard,
148 ),
149 MenuItem::action("File Bug Report", feedback::FileBugReport),
150 MenuItem::action("Request Feature", feedback::RequestFeature),
151 MenuItem::separator(),
152 MenuItem::action(
153 "Documentation",
154 crate::OpenBrowser {
155 url: "https://zed.dev/docs".into(),
156 },
157 ),
158 MenuItem::action(
159 "Zed Twitter",
160 crate::OpenBrowser {
161 url: "https://twitter.com/zeddotdev".into(),
162 },
163 ),
164 ],
165 },
166 ]
167}