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