menus.rs

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