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