lib.rs

  1use gpui::{Action, actions};
  2use schemars::JsonSchema;
  3use serde::{Deserialize, Serialize};
  4
  5// If the zed binary doesn't use anything in this crate, it will be optimized away
  6// and the actions won't initialize. So we just provide an empty initialization function
  7// to be called from main.
  8//
  9// These may provide relevant context:
 10// https://github.com/rust-lang/rust/issues/47384
 11// https://github.com/mmastrac/rust-ctor/issues/280
 12pub fn init() {}
 13
 14/// Opens a URL in the system's default web browser.
 15#[derive(Clone, PartialEq, Deserialize, JsonSchema, Action)]
 16#[action(namespace = zed)]
 17#[serde(deny_unknown_fields)]
 18pub struct OpenBrowser {
 19    pub url: String,
 20}
 21
 22/// Opens a zed:// URL within the application.
 23#[derive(Clone, PartialEq, Deserialize, JsonSchema, Action)]
 24#[action(namespace = zed)]
 25#[serde(deny_unknown_fields)]
 26pub struct OpenZedUrl {
 27    pub url: String,
 28}
 29
 30actions!(
 31    zed,
 32    [
 33        /// Opens the settings editor.
 34        OpenSettings,
 35        /// Opens the default keymap file.
 36        OpenDefaultKeymap,
 37        /// Opens account settings.
 38        OpenAccountSettings,
 39        /// Opens server settings.
 40        OpenServerSettings,
 41        /// Quits the application.
 42        Quit,
 43        /// Opens the user keymap file.
 44        OpenKeymap,
 45        /// Shows information about Zed.
 46        About,
 47        /// Opens the documentation website.
 48        OpenDocs,
 49        /// Views open source licenses.
 50        OpenLicenses,
 51        /// Opens the telemetry log.
 52        OpenTelemetryLog,
 53    ]
 54);
 55
 56#[derive(PartialEq, Clone, Copy, Debug, Deserialize, JsonSchema)]
 57#[serde(rename_all = "snake_case")]
 58pub enum ExtensionCategoryFilter {
 59    Themes,
 60    IconThemes,
 61    Languages,
 62    Grammars,
 63    LanguageServers,
 64    ContextServers,
 65    SlashCommands,
 66    IndexedDocsProviders,
 67    Snippets,
 68    DebugAdapters,
 69}
 70
 71/// Opens the extensions management interface.
 72#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
 73#[action(namespace = zed)]
 74#[serde(deny_unknown_fields)]
 75pub struct Extensions {
 76    /// Filters the extensions page down to extensions that are in the specified category.
 77    #[serde(default)]
 78    pub category_filter: Option<ExtensionCategoryFilter>,
 79    /// Focuses just the extension with the specified ID.
 80    #[serde(default)]
 81    pub id: Option<String>,
 82}
 83
 84/// Decreases the font size in the editor buffer.
 85#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
 86#[action(namespace = zed)]
 87#[serde(deny_unknown_fields)]
 88pub struct DecreaseBufferFontSize {
 89    #[serde(default)]
 90    pub persist: bool,
 91}
 92
 93/// Increases the font size in the editor buffer.
 94#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
 95#[action(namespace = zed)]
 96#[serde(deny_unknown_fields)]
 97pub struct IncreaseBufferFontSize {
 98    #[serde(default)]
 99    pub persist: bool,
100}
101
102/// Resets the buffer font size to the default value.
103#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
104#[action(namespace = zed)]
105#[serde(deny_unknown_fields)]
106pub struct ResetBufferFontSize {
107    #[serde(default)]
108    pub persist: bool,
109}
110
111/// Decreases the font size of the user interface.
112#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
113#[action(namespace = zed)]
114#[serde(deny_unknown_fields)]
115pub struct DecreaseUiFontSize {
116    #[serde(default)]
117    pub persist: bool,
118}
119
120/// Increases the font size of the user interface.
121#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
122#[action(namespace = zed)]
123#[serde(deny_unknown_fields)]
124pub struct IncreaseUiFontSize {
125    #[serde(default)]
126    pub persist: bool,
127}
128
129/// Resets the UI font size to the default value.
130#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
131#[action(namespace = zed)]
132#[serde(deny_unknown_fields)]
133pub struct ResetUiFontSize {
134    #[serde(default)]
135    pub persist: bool,
136}
137
138pub mod dev {
139    use gpui::actions;
140
141    actions!(
142        dev,
143        [
144            /// Toggles the developer inspector for debugging UI elements.
145            ToggleInspector
146        ]
147    );
148}
149
150pub mod workspace {
151    use gpui::actions;
152
153    actions!(
154        workspace,
155        [
156            #[action(deprecated_aliases = ["editor::CopyPath", "outline_panel::CopyPath", "project_panel::CopyPath"])]
157            CopyPath,
158            #[action(deprecated_aliases = ["editor::CopyRelativePath", "outline_panel::CopyRelativePath", "project_panel::CopyRelativePath"])]
159            CopyRelativePath
160        ]
161    );
162}
163
164pub mod git {
165    use gpui::actions;
166
167    actions!(
168        git,
169        [
170            /// Checks out a different git branch.
171            CheckoutBranch,
172            /// Switches to a different git branch.
173            Switch,
174            /// Selects a different repository.
175            SelectRepo,
176            /// Opens the git branch selector.
177            #[action(deprecated_aliases = ["branches::OpenRecent"])]
178            Branch
179        ]
180    );
181}
182
183pub mod jj {
184    use gpui::actions;
185
186    actions!(
187        jj,
188        [
189            /// Opens the Jujutsu bookmark list.
190            BookmarkList
191        ]
192    );
193}
194
195pub mod toast {
196    use gpui::actions;
197
198    actions!(
199        toast,
200        [
201            /// Runs the action associated with a toast notification.
202            RunAction
203        ]
204    );
205}
206
207pub mod command_palette {
208    use gpui::actions;
209
210    actions!(
211        command_palette,
212        [
213            /// Toggles the command palette.
214            Toggle
215        ]
216    );
217}
218
219pub mod feedback {
220    use gpui::actions;
221
222    actions!(
223        feedback,
224        [
225            /// Opens the bug report form.
226            FileBugReport,
227            /// Opens the feedback form.
228            GiveFeedback
229        ]
230    );
231}
232
233pub mod theme_selector {
234    use gpui::Action;
235    use schemars::JsonSchema;
236    use serde::Deserialize;
237
238    /// Toggles the theme selector interface.
239    #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
240    #[action(namespace = theme_selector)]
241    #[serde(deny_unknown_fields)]
242    pub struct Toggle {
243        /// A list of theme names to filter the theme selector down to.
244        pub themes_filter: Option<Vec<String>>,
245    }
246}
247
248pub mod icon_theme_selector {
249    use gpui::Action;
250    use schemars::JsonSchema;
251    use serde::Deserialize;
252
253    /// Toggles the icon theme selector interface.
254    #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
255    #[action(namespace = icon_theme_selector)]
256    #[serde(deny_unknown_fields)]
257    pub struct Toggle {
258        /// A list of icon theme names to filter the theme selector down to.
259        pub themes_filter: Option<Vec<String>>,
260    }
261}
262
263pub mod settings_profile_selector {
264    use gpui::Action;
265    use schemars::JsonSchema;
266    use serde::Deserialize;
267
268    #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
269    #[action(namespace = settings_profile_selector)]
270    pub struct Toggle;
271}
272
273pub mod agent {
274    use gpui::actions;
275
276    actions!(
277        agent,
278        [
279            /// Opens the agent settings panel.
280            #[action(deprecated_aliases = ["agent::OpenConfiguration"])]
281            OpenSettings,
282            /// Opens the agent onboarding modal.
283            OpenOnboardingModal,
284            /// Resets the agent onboarding state.
285            ResetOnboarding,
286            /// Starts a chat conversation with the agent.
287            Chat,
288            /// Displays the previous message in the history.
289            PreviousHistoryMessage,
290            /// Displays the next message in the history.
291            NextHistoryMessage,
292            /// Toggles the language model selector dropdown.
293            #[action(deprecated_aliases = ["assistant::ToggleModelSelector", "assistant2::ToggleModelSelector"])]
294            ToggleModelSelector
295        ]
296    );
297}
298
299pub mod assistant {
300    use gpui::{Action, actions};
301    use schemars::JsonSchema;
302    use serde::Deserialize;
303    use uuid::Uuid;
304
305    actions!(
306        agent,
307        [
308            #[action(deprecated_aliases = ["assistant::ToggleFocus"])]
309            ToggleFocus
310        ]
311    );
312
313    actions!(
314        assistant,
315        [
316            /// Shows the assistant configuration panel.
317            ShowConfiguration
318        ]
319    );
320
321    /// Opens the rules library for managing agent rules and prompts.
322    #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
323    #[action(namespace = agent, deprecated_aliases = ["assistant::OpenRulesLibrary", "assistant::DeployPromptLibrary"])]
324    #[serde(deny_unknown_fields)]
325    pub struct OpenRulesLibrary {
326        #[serde(skip)]
327        pub prompt_to_select: Option<Uuid>,
328    }
329
330    /// Deploys the assistant interface with the specified configuration.
331    #[derive(Clone, Default, Deserialize, PartialEq, JsonSchema, Action)]
332    #[action(namespace = assistant)]
333    #[serde(deny_unknown_fields)]
334    pub struct InlineAssist {
335        pub prompt: Option<String>,
336    }
337}
338
339pub mod debugger {
340    use gpui::actions;
341
342    actions!(
343        debugger,
344        [
345            /// Opens the debugger onboarding modal.
346            OpenOnboardingModal,
347            /// Resets the debugger onboarding state.
348            ResetOnboarding
349        ]
350    );
351}
352
353/// Opens the recent projects interface.
354#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
355#[action(namespace = projects)]
356#[serde(deny_unknown_fields)]
357pub struct OpenRecent {
358    #[serde(default)]
359    pub create_new_window: bool,
360}
361
362/// Creates a project from a selected template.
363#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
364#[action(namespace = projects)]
365#[serde(deny_unknown_fields)]
366pub struct OpenRemote {
367    #[serde(default)]
368    pub from_existing_connection: bool,
369    #[serde(default)]
370    pub create_new_window: bool,
371}
372
373/// Where to spawn the task in the UI.
374#[derive(Default, Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
375#[serde(rename_all = "snake_case")]
376pub enum RevealTarget {
377    /// In the central pane group, "main" editor area.
378    Center,
379    /// In the terminal dock, "regular" terminal items' place.
380    #[default]
381    Dock,
382}
383
384/// Spawns a task with name or opens tasks modal.
385#[derive(Debug, PartialEq, Clone, Deserialize, JsonSchema, Action)]
386#[action(namespace = task)]
387#[serde(untagged)]
388pub enum Spawn {
389    /// Spawns a task by the name given.
390    ByName {
391        task_name: String,
392        #[serde(default)]
393        reveal_target: Option<RevealTarget>,
394    },
395    /// Spawns a task by the name given.
396    ByTag {
397        task_tag: String,
398        #[serde(default)]
399        reveal_target: Option<RevealTarget>,
400    },
401    /// Spawns a task via modal's selection.
402    ViaModal {
403        /// Selected task's `reveal_target` property override.
404        #[serde(default)]
405        reveal_target: Option<RevealTarget>,
406    },
407}
408
409impl Spawn {
410    pub fn modal() -> Self {
411        Self::ViaModal {
412            reveal_target: None,
413        }
414    }
415}
416
417/// Reruns the last task.
418#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
419#[action(namespace = task)]
420#[serde(deny_unknown_fields)]
421pub struct Rerun {
422    /// Controls whether the task context is reevaluated prior to execution of a task.
423    /// If it is not, environment variables such as ZED_COLUMN, ZED_FILE are gonna be the same as in the last execution of a task
424    /// If it is, these variables will be updated to reflect current state of editor at the time task::Rerun is executed.
425    /// default: false
426    #[serde(default)]
427    pub reevaluate_context: bool,
428    /// Overrides `allow_concurrent_runs` property of the task being reran.
429    /// Default: null
430    #[serde(default)]
431    pub allow_concurrent_runs: Option<bool>,
432    /// Overrides `use_new_terminal` property of the task being reran.
433    /// Default: null
434    #[serde(default)]
435    pub use_new_terminal: Option<bool>,
436
437    /// If present, rerun the task with this ID, otherwise rerun the last task.
438    #[serde(skip)]
439    pub task_id: Option<String>,
440}
441
442pub mod outline {
443    use std::sync::OnceLock;
444
445    use gpui::{AnyView, App, Window, actions};
446
447    actions!(
448        outline,
449        [
450            #[action(name = "Toggle")]
451            ToggleOutline
452        ]
453    );
454    /// A pointer to outline::toggle function, exposed here to sewer the breadcrumbs <-> outline dependency.
455    pub static TOGGLE_OUTLINE: OnceLock<fn(AnyView, &mut Window, &mut App)> = OnceLock::new();
456}
457
458actions!(
459    zed_predict_onboarding,
460    [
461        /// Opens the Zed Predict onboarding modal.
462        OpenZedPredictOnboarding
463    ]
464);
465actions!(
466    git_onboarding,
467    [
468        /// Opens the git integration onboarding modal.
469        OpenGitIntegrationOnboarding
470    ]
471);
472
473actions!(
474    debug_panel,
475    [
476        /// Toggles focus on the debug panel.
477        ToggleFocus
478    ]
479);
480actions!(
481    debugger,
482    [
483        /// Toggles the enabled state of a breakpoint.
484        ToggleEnableBreakpoint,
485        /// Removes a breakpoint.
486        UnsetBreakpoint,
487        /// Opens the project debug tasks configuration.
488        OpenProjectDebugTasks,
489    ]
490);