app_menus.rs

  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::actions::Undo, OsAction::Undo),
 57                MenuItem::os_action("Redo", editor::actions::Redo, OsAction::Redo),
 58                MenuItem::separator(),
 59                MenuItem::os_action("Cut", editor::actions::Cut, OsAction::Cut),
 60                MenuItem::os_action("Copy", editor::actions::Copy, OsAction::Copy),
 61                MenuItem::os_action("Paste", editor::actions::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(
 67                    "Toggle Line Comment",
 68                    editor::actions::ToggleComments::default(),
 69                ),
 70                MenuItem::action("Emoji & Symbols", editor::actions::ShowCharacterPalette),
 71            ],
 72        },
 73        Menu {
 74            name: "Selection",
 75            items: vec![
 76                MenuItem::os_action(
 77                    "Select All",
 78                    editor::actions::SelectAll,
 79                    OsAction::SelectAll,
 80                ),
 81                MenuItem::action("Expand Selection", editor::actions::SelectLargerSyntaxNode),
 82                MenuItem::action("Shrink Selection", editor::actions::SelectSmallerSyntaxNode),
 83                MenuItem::separator(),
 84                MenuItem::action("Add Cursor Above", editor::actions::AddSelectionAbove),
 85                MenuItem::action("Add Cursor Below", editor::actions::AddSelectionBelow),
 86                MenuItem::action(
 87                    "Select Next Occurrence",
 88                    editor::actions::SelectNext {
 89                        replace_newest: false,
 90                    },
 91                ),
 92                MenuItem::separator(),
 93                MenuItem::action("Move Line Up", editor::actions::MoveLineUp),
 94                MenuItem::action("Move Line Down", editor::actions::MoveLineDown),
 95                MenuItem::action("Duplicate Selection", editor::actions::DuplicateLine),
 96            ],
 97        },
 98        Menu {
 99            name: "View",
100            items: vec![
101                MenuItem::action("Zoom In", super::IncreaseBufferFontSize),
102                MenuItem::action("Zoom Out", super::DecreaseBufferFontSize),
103                MenuItem::action("Reset Zoom", super::ResetBufferFontSize),
104                MenuItem::separator(),
105                MenuItem::action("Toggle Left Dock", workspace::ToggleLeftDock),
106                MenuItem::action("Toggle Right Dock", workspace::ToggleRightDock),
107                MenuItem::action("Toggle Bottom Dock", workspace::ToggleBottomDock),
108                MenuItem::action("Close All Docks", workspace::CloseAllDocks),
109                MenuItem::submenu(Menu {
110                    name: "Editor Layout",
111                    items: vec![
112                        MenuItem::action("Split Up", workspace::SplitUp),
113                        MenuItem::action("Split Down", workspace::SplitDown),
114                        MenuItem::action("Split Left", workspace::SplitLeft),
115                        MenuItem::action("Split Right", workspace::SplitRight),
116                    ],
117                }),
118                MenuItem::separator(),
119                MenuItem::action("Project Panel", project_panel::ToggleFocus),
120                MenuItem::action("Command Palette", command_palette::Toggle),
121                MenuItem::action("Diagnostics", diagnostics::Deploy),
122                MenuItem::separator(),
123            ],
124        },
125        Menu {
126            name: "Go",
127            items: vec![
128                MenuItem::action("Back", workspace::GoBack),
129                MenuItem::action("Forward", workspace::GoForward),
130                MenuItem::separator(),
131                MenuItem::action("Go to File", file_finder::Toggle),
132                // MenuItem::action("Go to Symbol in Project", project_symbols::Toggle),
133                MenuItem::action("Go to Symbol in Editor", outline::Toggle),
134                MenuItem::action("Go to Definition", editor::actions::GoToDefinition),
135                MenuItem::action("Go to Type Definition", editor::actions::GoToTypeDefinition),
136                MenuItem::action("Find All References", editor::actions::FindAllReferences),
137                MenuItem::action("Go to Line/Column", go_to_line::Toggle),
138                MenuItem::separator(),
139                MenuItem::action("Next Problem", editor::actions::GoToDiagnostic),
140                MenuItem::action("Previous Problem", editor::actions::GoToPrevDiagnostic),
141            ],
142        },
143        Menu {
144            name: "Window",
145            items: vec![
146                MenuItem::action("Minimize", super::Minimize),
147                MenuItem::action("Zoom", super::Zoom),
148                MenuItem::separator(),
149            ],
150        },
151        Menu {
152            name: "Help",
153            items: vec![
154                MenuItem::action("Command Palette", command_palette::Toggle),
155                MenuItem::separator(),
156                MenuItem::action("View Telemetry", crate::OpenTelemetryLog),
157                MenuItem::action("View Dependency Licenses", crate::OpenLicenses),
158                MenuItem::action("Show Welcome", workspace::Welcome),
159                MenuItem::separator(),
160                MenuItem::separator(),
161                MenuItem::action(
162                    "Documentation",
163                    crate::OpenBrowser {
164                        url: "https://zed.dev/docs".into(),
165                    },
166                ),
167                MenuItem::action(
168                    "Zed Twitter",
169                    crate::OpenBrowser {
170                        url: "https://twitter.com/zeddotdev".into(),
171                    },
172                ),
173            ],
174        },
175    ]
176}