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            /// Opens the selected file with the system's default application.
161            #[action(deprecated_aliases = ["project_panel::OpenWithSystem"])]
162            OpenWithSystem,
163        ]
164    );
165}
166
167pub mod git {
168    use gpui::actions;
169
170    actions!(
171        git,
172        [
173            /// Checks out a different git branch.
174            CheckoutBranch,
175            /// Switches to a different git branch.
176            Switch,
177            /// Selects a different repository.
178            SelectRepo,
179            /// Opens the git branch selector.
180            #[action(deprecated_aliases = ["branches::OpenRecent"])]
181            Branch
182        ]
183    );
184}
185
186pub mod jj {
187    use gpui::actions;
188
189    actions!(
190        jj,
191        [
192            /// Opens the Jujutsu bookmark list.
193            BookmarkList
194        ]
195    );
196}
197
198pub mod toast {
199    use gpui::actions;
200
201    actions!(
202        toast,
203        [
204            /// Runs the action associated with a toast notification.
205            RunAction
206        ]
207    );
208}
209
210pub mod command_palette {
211    use gpui::actions;
212
213    actions!(
214        command_palette,
215        [
216            /// Toggles the command palette.
217            Toggle
218        ]
219    );
220}
221
222pub mod feedback {
223    use gpui::actions;
224
225    actions!(
226        feedback,
227        [
228            /// Opens the bug report form.
229            FileBugReport,
230            /// Opens the feedback form.
231            GiveFeedback
232        ]
233    );
234}
235
236pub mod theme_selector {
237    use gpui::Action;
238    use schemars::JsonSchema;
239    use serde::Deserialize;
240
241    /// Toggles the theme selector interface.
242    #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
243    #[action(namespace = theme_selector)]
244    #[serde(deny_unknown_fields)]
245    pub struct Toggle {
246        /// A list of theme names to filter the theme selector down to.
247        pub themes_filter: Option<Vec<String>>,
248    }
249}
250
251pub mod icon_theme_selector {
252    use gpui::Action;
253    use schemars::JsonSchema;
254    use serde::Deserialize;
255
256    /// Toggles the icon theme selector interface.
257    #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
258    #[action(namespace = icon_theme_selector)]
259    #[serde(deny_unknown_fields)]
260    pub struct Toggle {
261        /// A list of icon theme names to filter the theme selector down to.
262        pub themes_filter: Option<Vec<String>>,
263    }
264}
265
266pub mod settings_profile_selector {
267    use gpui::Action;
268    use schemars::JsonSchema;
269    use serde::Deserialize;
270
271    #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
272    #[action(namespace = settings_profile_selector)]
273    pub struct Toggle;
274}
275
276pub mod agent {
277    use gpui::actions;
278
279    actions!(
280        agent,
281        [
282            /// Opens the agent settings panel.
283            #[action(deprecated_aliases = ["agent::OpenConfiguration"])]
284            OpenSettings,
285            /// Opens the agent onboarding modal.
286            OpenOnboardingModal,
287            /// Resets the agent onboarding state.
288            ResetOnboarding,
289            /// Starts a chat conversation with the agent.
290            Chat,
291            /// Toggles the language model selector dropdown.
292            #[action(deprecated_aliases = ["assistant::ToggleModelSelector", "assistant2::ToggleModelSelector"])]
293            ToggleModelSelector,
294            /// Triggers re-authentication on Gemini
295            ReauthenticateAgent
296        ]
297    );
298}
299
300pub mod assistant {
301    use gpui::{Action, actions};
302    use schemars::JsonSchema;
303    use serde::Deserialize;
304    use uuid::Uuid;
305
306    actions!(
307        agent,
308        [
309            #[action(deprecated_aliases = ["assistant::ToggleFocus"])]
310            ToggleFocus
311        ]
312    );
313
314    actions!(
315        assistant,
316        [
317            /// Shows the assistant configuration panel.
318            ShowConfiguration
319        ]
320    );
321
322    /// Opens the rules library for managing agent rules and prompts.
323    #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
324    #[action(namespace = agent, deprecated_aliases = ["assistant::OpenRulesLibrary", "assistant::DeployPromptLibrary"])]
325    #[serde(deny_unknown_fields)]
326    pub struct OpenRulesLibrary {
327        #[serde(skip)]
328        pub prompt_to_select: Option<Uuid>,
329    }
330
331    /// Deploys the assistant interface with the specified configuration.
332    #[derive(Clone, Default, Deserialize, PartialEq, JsonSchema, Action)]
333    #[action(namespace = assistant)]
334    #[serde(deny_unknown_fields)]
335    pub struct InlineAssist {
336        pub prompt: Option<String>,
337    }
338}
339
340pub mod debugger {
341    use gpui::actions;
342
343    actions!(
344        debugger,
345        [
346            /// Opens the debugger onboarding modal.
347            OpenOnboardingModal,
348            /// Resets the debugger onboarding state.
349            ResetOnboarding
350        ]
351    );
352}
353
354/// Opens the recent projects interface.
355#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
356#[action(namespace = projects)]
357#[serde(deny_unknown_fields)]
358pub struct OpenRecent {
359    #[serde(default)]
360    pub create_new_window: bool,
361}
362
363/// Creates a project from a selected template.
364#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
365#[action(namespace = projects)]
366#[serde(deny_unknown_fields)]
367pub struct OpenRemote {
368    #[serde(default)]
369    pub from_existing_connection: bool,
370    #[serde(default)]
371    pub create_new_window: bool,
372}
373
374/// Where to spawn the task in the UI.
375#[derive(Default, Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
376#[serde(rename_all = "snake_case")]
377pub enum RevealTarget {
378    /// In the central pane group, "main" editor area.
379    Center,
380    /// In the terminal dock, "regular" terminal items' place.
381    #[default]
382    Dock,
383}
384
385/// Spawns a task with name or opens tasks modal.
386#[derive(Debug, PartialEq, Clone, Deserialize, JsonSchema, Action)]
387#[action(namespace = task)]
388#[serde(untagged)]
389pub enum Spawn {
390    /// Spawns a task by the name given.
391    ByName {
392        task_name: String,
393        #[serde(default)]
394        reveal_target: Option<RevealTarget>,
395    },
396    /// Spawns a task by the name given.
397    ByTag {
398        task_tag: String,
399        #[serde(default)]
400        reveal_target: Option<RevealTarget>,
401    },
402    /// Spawns a task via modal's selection.
403    ViaModal {
404        /// Selected task's `reveal_target` property override.
405        #[serde(default)]
406        reveal_target: Option<RevealTarget>,
407    },
408}
409
410impl Spawn {
411    pub fn modal() -> Self {
412        Self::ViaModal {
413            reveal_target: None,
414        }
415    }
416}
417
418/// Reruns the last task.
419#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
420#[action(namespace = task)]
421#[serde(deny_unknown_fields)]
422pub struct Rerun {
423    /// Controls whether the task context is reevaluated prior to execution of a task.
424    /// 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
425    /// If it is, these variables will be updated to reflect current state of editor at the time task::Rerun is executed.
426    /// default: false
427    #[serde(default)]
428    pub reevaluate_context: bool,
429    /// Overrides `allow_concurrent_runs` property of the task being reran.
430    /// Default: null
431    #[serde(default)]
432    pub allow_concurrent_runs: Option<bool>,
433    /// Overrides `use_new_terminal` property of the task being reran.
434    /// Default: null
435    #[serde(default)]
436    pub use_new_terminal: Option<bool>,
437
438    /// If present, rerun the task with this ID, otherwise rerun the last task.
439    #[serde(skip)]
440    pub task_id: Option<String>,
441}
442
443pub mod outline {
444    use std::sync::OnceLock;
445
446    use gpui::{AnyView, App, Window, actions};
447
448    actions!(
449        outline,
450        [
451            #[action(name = "Toggle")]
452            ToggleOutline
453        ]
454    );
455    /// A pointer to outline::toggle function, exposed here to sewer the breadcrumbs <-> outline dependency.
456    pub static TOGGLE_OUTLINE: OnceLock<fn(AnyView, &mut Window, &mut App)> = OnceLock::new();
457}
458
459actions!(
460    zed_predict_onboarding,
461    [
462        /// Opens the Zed Predict onboarding modal.
463        OpenZedPredictOnboarding
464    ]
465);
466actions!(
467    git_onboarding,
468    [
469        /// Opens the git integration onboarding modal.
470        OpenGitIntegrationOnboarding
471    ]
472);
473
474actions!(
475    debug_panel,
476    [
477        /// Toggles focus on the debug panel.
478        ToggleFocus
479    ]
480);
481actions!(
482    debugger,
483    [
484        /// Toggles the enabled state of a breakpoint.
485        ToggleEnableBreakpoint,
486        /// Removes a breakpoint.
487        UnsetBreakpoint,
488        /// Opens the project debug tasks configuration.
489        OpenProjectDebugTasks,
490    ]
491);