use gpui::{Action, actions}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; // If the zed binary doesn't use anything in this crate, it will be optimized away // and the actions won't initialize. So we just provide an empty initialization function // to be called from main. // // These may provide relevant context: // https://github.com/rust-lang/rust/issues/47384 // https://github.com/mmastrac/rust-ctor/issues/280 pub fn init() {} /// Opens a URL in the system's default web browser. #[derive(Clone, PartialEq, Deserialize, JsonSchema, Action)] #[action(namespace = zed)] #[serde(deny_unknown_fields)] pub struct OpenBrowser { pub url: String, } /// Opens a zed:// URL within the application. #[derive(Clone, PartialEq, Deserialize, JsonSchema, Action)] #[action(namespace = zed)] #[serde(deny_unknown_fields)] pub struct OpenZedUrl { pub url: String, } actions!( zed, [ /// Opens the settings editor. OpenSettings, /// Opens the default keymap file. OpenDefaultKeymap, /// Opens account settings. OpenAccountSettings, /// Opens server settings. OpenServerSettings, /// Quits the application. Quit, /// Opens the user keymap file. OpenKeymap, /// Shows information about Zed. About, /// Opens the documentation website. OpenDocs, /// Views open source licenses. OpenLicenses, /// Opens the telemetry log. OpenTelemetryLog, ] ); #[derive(PartialEq, Clone, Copy, Debug, Deserialize, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum ExtensionCategoryFilter { Themes, IconThemes, Languages, Grammars, LanguageServers, ContextServers, SlashCommands, IndexedDocsProviders, Snippets, DebugAdapters, } /// Opens the extensions management interface. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = zed)] #[serde(deny_unknown_fields)] pub struct Extensions { /// Filters the extensions page down to extensions that are in the specified category. #[serde(default)] pub category_filter: Option, /// Focuses just the extension with the specified ID. #[serde(default)] pub id: Option, } /// Decreases the font size in the editor buffer. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = zed)] #[serde(deny_unknown_fields)] pub struct DecreaseBufferFontSize { #[serde(default)] pub persist: bool, } /// Increases the font size in the editor buffer. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = zed)] #[serde(deny_unknown_fields)] pub struct IncreaseBufferFontSize { #[serde(default)] pub persist: bool, } /// Resets the buffer font size to the default value. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = zed)] #[serde(deny_unknown_fields)] pub struct ResetBufferFontSize { #[serde(default)] pub persist: bool, } /// Decreases the font size of the user interface. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = zed)] #[serde(deny_unknown_fields)] pub struct DecreaseUiFontSize { #[serde(default)] pub persist: bool, } /// Increases the font size of the user interface. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = zed)] #[serde(deny_unknown_fields)] pub struct IncreaseUiFontSize { #[serde(default)] pub persist: bool, } /// Resets the UI font size to the default value. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = zed)] #[serde(deny_unknown_fields)] pub struct ResetUiFontSize { #[serde(default)] pub persist: bool, } pub mod dev { use gpui::actions; actions!( dev, [ /// Toggles the developer inspector for debugging UI elements. ToggleInspector ] ); } pub mod workspace { use gpui::actions; actions!( workspace, [ #[action(deprecated_aliases = ["editor::CopyPath", "outline_panel::CopyPath", "project_panel::CopyPath"])] CopyPath, #[action(deprecated_aliases = ["editor::CopyRelativePath", "outline_panel::CopyRelativePath", "project_panel::CopyRelativePath"])] CopyRelativePath ] ); } pub mod git { use gpui::actions; actions!( git, [ /// Checks out a different git branch. CheckoutBranch, /// Switches to a different git branch. Switch, /// Selects a different repository. SelectRepo, /// Opens the git branch selector. #[action(deprecated_aliases = ["branches::OpenRecent"])] Branch ] ); } pub mod jj { use gpui::actions; actions!( jj, [ /// Opens the Jujutsu bookmark list. BookmarkList ] ); } pub mod toast { use gpui::actions; actions!( toast, [ /// Runs the action associated with a toast notification. RunAction ] ); } pub mod command_palette { use gpui::actions; actions!( command_palette, [ /// Toggles the command palette. Toggle ] ); } pub mod feedback { use gpui::actions; actions!( feedback, [ /// Opens the bug report form. FileBugReport, /// Opens the feedback form. GiveFeedback ] ); } pub mod theme_selector { use gpui::Action; use schemars::JsonSchema; use serde::Deserialize; /// Toggles the theme selector interface. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = theme_selector)] #[serde(deny_unknown_fields)] pub struct Toggle { /// A list of theme names to filter the theme selector down to. pub themes_filter: Option>, } } pub mod icon_theme_selector { use gpui::Action; use schemars::JsonSchema; use serde::Deserialize; /// Toggles the icon theme selector interface. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = icon_theme_selector)] #[serde(deny_unknown_fields)] pub struct Toggle { /// A list of icon theme names to filter the theme selector down to. pub themes_filter: Option>, } } pub mod agent { use gpui::actions; actions!( agent, [ /// Opens the agent configuration panel. OpenConfiguration, /// Opens the agent onboarding modal. OpenOnboardingModal, /// Resets the agent onboarding state. ResetOnboarding, /// Starts a chat conversation with the agent. Chat, /// Displays the previous message in the history. PreviousHistoryMessage, /// Displays the next message in the history. NextHistoryMessage ] ); } pub mod assistant { use gpui::{Action, actions}; use schemars::JsonSchema; use serde::Deserialize; use uuid::Uuid; actions!( agent, [ #[action(deprecated_aliases = ["assistant::ToggleFocus"])] ToggleFocus ] ); actions!( assistant, [ /// Shows the assistant configuration panel. ShowConfiguration ] ); /// Opens the rules library for managing agent rules and prompts. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = agent, deprecated_aliases = ["assistant::OpenRulesLibrary", "assistant::DeployPromptLibrary"])] #[serde(deny_unknown_fields)] pub struct OpenRulesLibrary { #[serde(skip)] pub prompt_to_select: Option, } /// Deploys the assistant interface with the specified configuration. #[derive(Clone, Default, Deserialize, PartialEq, JsonSchema, Action)] #[action(namespace = assistant)] #[serde(deny_unknown_fields)] pub struct InlineAssist { pub prompt: Option, } } pub mod debugger { use gpui::actions; actions!( debugger, [ /// Opens the debugger onboarding modal. OpenOnboardingModal, /// Resets the debugger onboarding state. ResetOnboarding ] ); } /// Opens the recent projects interface. #[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)] #[action(namespace = projects)] #[serde(deny_unknown_fields)] pub struct OpenRecent { #[serde(default)] pub create_new_window: bool, } /// Creates a project from a selected template. #[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)] #[action(namespace = projects)] #[serde(deny_unknown_fields)] pub struct OpenRemote { #[serde(default)] pub from_existing_connection: bool, #[serde(default)] pub create_new_window: bool, } /// Where to spawn the task in the UI. #[derive(Default, Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum RevealTarget { /// In the central pane group, "main" editor area. Center, /// In the terminal dock, "regular" terminal items' place. #[default] Dock, } /// Spawns a task with name or opens tasks modal. #[derive(Debug, PartialEq, Clone, Deserialize, JsonSchema, Action)] #[action(namespace = task)] #[serde(untagged)] pub enum Spawn { /// Spawns a task by the name given. ByName { task_name: String, #[serde(default)] reveal_target: Option, }, /// Spawns a task by the name given. ByTag { task_tag: String, #[serde(default)] reveal_target: Option, }, /// Spawns a task via modal's selection. ViaModal { /// Selected task's `reveal_target` property override. #[serde(default)] reveal_target: Option, }, } impl Spawn { pub fn modal() -> Self { Self::ViaModal { reveal_target: None, } } } /// Reruns the last task. #[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)] #[action(namespace = task)] #[serde(deny_unknown_fields)] pub struct Rerun { /// Controls whether the task context is reevaluated prior to execution of a task. /// 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 /// If it is, these variables will be updated to reflect current state of editor at the time task::Rerun is executed. /// default: false #[serde(default)] pub reevaluate_context: bool, /// Overrides `allow_concurrent_runs` property of the task being reran. /// Default: null #[serde(default)] pub allow_concurrent_runs: Option, /// Overrides `use_new_terminal` property of the task being reran. /// Default: null #[serde(default)] pub use_new_terminal: Option, /// If present, rerun the task with this ID, otherwise rerun the last task. #[serde(skip)] pub task_id: Option, } pub mod outline { use std::sync::OnceLock; use gpui::{AnyView, App, Window, actions}; actions!( outline, [ #[action(name = "Toggle")] ToggleOutline ] ); /// A pointer to outline::toggle function, exposed here to sewer the breadcrumbs <-> outline dependency. pub static TOGGLE_OUTLINE: OnceLock = OnceLock::new(); } actions!( zed_predict_onboarding, [ /// Opens the Zed Predict onboarding modal. OpenZedPredictOnboarding ] ); actions!( git_onboarding, [ /// Opens the git integration onboarding modal. OpenGitIntegrationOnboarding ] ); actions!( debug_panel, [ /// Toggles focus on the debug panel. ToggleFocus ] ); actions!( debugger, [ /// Toggles the enabled state of a breakpoint. ToggleEnableBreakpoint, /// Removes a breakpoint. UnsetBreakpoint, /// Opens the project debug tasks configuration. OpenProjectDebugTasks, ] );