diff --git a/crates/activity_indicator2/src/activity_indicator.rs b/crates/activity_indicator2/src/activity_indicator.rs index 1ee5a6689a..e4a5b01ba6 100644 --- a/crates/activity_indicator2/src/activity_indicator.rs +++ b/crates/activity_indicator2/src/activity_indicator.rs @@ -14,7 +14,7 @@ use ui::h_stack; use util::ResultExt; use workspace::{item::ItemHandle, StatusItemView, Workspace}; -actions!(ShowErrorMessage); +actions!(activity_indicator, [ShowErrorMessage]); const DOWNLOAD_ICON: &str = "icons/download.svg"; const WARNING_ICON: &str = "icons/warning.svg"; diff --git a/crates/assistant2/src/assistant.rs b/crates/assistant2/src/assistant.rs index 871ab131e5..743c8b22e6 100644 --- a/crates/assistant2/src/assistant.rs +++ b/crates/assistant2/src/assistant.rs @@ -19,16 +19,19 @@ use std::{cmp::Reverse, ffi::OsStr, path::PathBuf, sync::Arc}; use util::paths::CONVERSATIONS_DIR; actions!( - NewConversation, - Assist, - Split, - CycleMessageRole, - QuoteSelection, - ToggleFocus, - ResetKey, - InlineAssist, - ToggleIncludeConversation, - ToggleRetrieveContext, + assistant, + [ + NewConversation, + Assist, + Split, + CycleMessageRole, + QuoteSelection, + ToggleFocus, + ResetKey, + InlineAssist, + ToggleIncludeConversation, + ToggleRetrieveContext, + ] ); #[derive( diff --git a/crates/auto_update2/src/auto_update.rs b/crates/auto_update2/src/auto_update.rs index dbccd269b7..31e474242a 100644 --- a/crates/auto_update2/src/auto_update.rs +++ b/crates/auto_update2/src/auto_update.rs @@ -26,10 +26,13 @@ const POLL_INTERVAL: Duration = Duration::from_secs(60 * 60); //todo!(remove CheckThatAutoUpdaterWorks) actions!( - Check, - DismissErrorMessage, - ViewReleaseNotes, - CheckThatAutoUpdaterWorks + auto_update, + [ + Check, + DismissErrorMessage, + ViewReleaseNotes, + CheckThatAutoUpdaterWorks + ] ); #[derive(Serialize)] diff --git a/crates/client2/src/client2.rs b/crates/client2/src/client2.rs index 4746c9c6e4..bf8d5dda77 100644 --- a/crates/client2/src/client2.rs +++ b/crates/client2/src/client2.rs @@ -70,7 +70,7 @@ pub const ZED_SECRET_CLIENT_TOKEN: &str = "618033988749894"; pub const INITIAL_RECONNECTION_DELAY: Duration = Duration::from_millis(100); pub const CONNECTION_TIMEOUT: Duration = Duration::from_secs(5); -actions!(SignIn, SignOut, Reconnect); +actions!(client, [SignIn, SignOut, Reconnect]); pub fn init_settings(cx: &mut AppContext) { TelemetrySettings::register(cx); diff --git a/crates/collab_ui2/src/channel_view.rs b/crates/collab_ui2/src/channel_view.rs index 8d2c037f9d..fb16fb67b0 100644 --- a/crates/collab_ui2/src/channel_view.rs +++ b/crates/collab_ui2/src/channel_view.rs @@ -26,7 +26,7 @@ use workspace::{ ItemNavHistory, Pane, SaveIntent, ViewId, Workspace, WorkspaceId, }; -actions!(Deploy); +actions!(collab, [Deploy]); pub fn init(cx: &mut AppContext) { register_followable_item::(cx) diff --git a/crates/collab_ui2/src/chat_panel.rs b/crates/collab_ui2/src/chat_panel.rs index a6736d19f2..c484016aae 100644 --- a/crates/collab_ui2/src/chat_panel.rs +++ b/crates/collab_ui2/src/chat_panel.rs @@ -75,7 +75,7 @@ pub enum Event { Dismissed, } -actions!(ToggleFocus); +actions!(chat_panel, [ToggleFocus]); impl ChatPanel { pub fn new(workspace: &mut Workspace, cx: &mut ViewContext) -> View { diff --git a/crates/collab_ui2/src/collab_panel.rs b/crates/collab_ui2/src/collab_panel.rs index 9dcad01acd..1892fc6fa9 100644 --- a/crates/collab_ui2/src/collab_panel.rs +++ b/crates/collab_ui2/src/collab_panel.rs @@ -123,14 +123,17 @@ pub struct OpenChannelNotes { // } actions!( - ToggleFocus, - Remove, - Secondary, - CollapseSelectedChannel, - ExpandSelectedChannel, - StartMoveChannel, - MoveSelected, - InsertSpace, + collab_panel, + [ + ToggleFocus, + Remove, + Secondary, + CollapseSelectedChannel, + ExpandSelectedChannel, + StartMoveChannel, + MoveSelected, + InsertSpace, + ] ); // impl_actions!( diff --git a/crates/collab_ui2/src/collab_panel/channel_modal.rs b/crates/collab_ui2/src/collab_panel/channel_modal.rs index 3a630a1959..8636dcafe4 100644 --- a/crates/collab_ui2/src/collab_panel/channel_modal.rs +++ b/crates/collab_ui2/src/collab_panel/channel_modal.rs @@ -16,10 +16,13 @@ use util::TryFutureExt; use workspace::ModalView; actions!( - SelectNextControl, - ToggleMode, - ToggleMemberAdmin, - RemoveMember + channel_modal, + [ + SelectNextControl, + ToggleMode, + ToggleMemberAdmin, + RemoveMember + ] ); // pub fn init(cx: &mut AppContext) { diff --git a/crates/collab_ui2/src/collab_titlebar_item.rs b/crates/collab_ui2/src/collab_titlebar_item.rs index d137b2195a..4940893a6c 100644 --- a/crates/collab_ui2/src/collab_titlebar_item.rs +++ b/crates/collab_ui2/src/collab_titlebar_item.rs @@ -20,11 +20,14 @@ const MAX_PROJECT_NAME_LENGTH: usize = 40; const MAX_BRANCH_NAME_LENGTH: usize = 40; actions!( - ShareProject, - UnshareProject, - ToggleUserMenu, - ToggleProjectMenu, - SwitchBranch + collab, + [ + ShareProject, + UnshareProject, + ToggleUserMenu, + ToggleProjectMenu, + SwitchBranch + ] ); pub fn init(cx: &mut AppContext) { diff --git a/crates/collab_ui2/src/collab_ui.rs b/crates/collab_ui2/src/collab_ui.rs index 9e01630b46..b23971b3f2 100644 --- a/crates/collab_ui2/src/collab_ui.rs +++ b/crates/collab_ui2/src/collab_ui.rs @@ -24,7 +24,10 @@ use settings::Settings; use util::ResultExt; use workspace::AppState; -actions!(ToggleScreenSharing, ToggleMute, ToggleDeafen, LeaveCall); +actions!( + collab, + [ToggleScreenSharing, ToggleMute, ToggleDeafen, LeaveCall] +); pub fn init(app_state: &Arc, cx: &mut AppContext) { CollaborationPanelSettings::register(cx); diff --git a/crates/command_palette2/src/command_palette.rs b/crates/command_palette2/src/command_palette.rs index 6a3bbe56c4..4827b13751 100644 --- a/crates/command_palette2/src/command_palette.rs +++ b/crates/command_palette2/src/command_palette.rs @@ -19,7 +19,7 @@ use util::{ use workspace::{ModalView, Workspace}; use zed_actions::OpenZedURL; -actions!(Toggle); +actions!(command_palette, [Toggle]); pub fn init(cx: &mut AppContext) { cx.set_global(HitCounts::default()); diff --git a/crates/copilot2/src/copilot2.rs b/crates/copilot2/src/copilot2.rs index 9c5483d634..4fd05a9c08 100644 --- a/crates/copilot2/src/copilot2.rs +++ b/crates/copilot2/src/copilot2.rs @@ -34,12 +34,15 @@ use util::{ }; actions!( - Suggest, - NextSuggestion, - PreviousSuggestion, - Reinstall, - SignIn, - SignOut + copilot, + [ + Suggest, + NextSuggestion, + PreviousSuggestion, + Reinstall, + SignIn, + SignOut + ] ); pub fn init( diff --git a/crates/diagnostics2/src/diagnostics.rs b/crates/diagnostics2/src/diagnostics.rs index f725fb7c4f..9367d2b2ec 100644 --- a/crates/diagnostics2/src/diagnostics.rs +++ b/crates/diagnostics2/src/diagnostics.rs @@ -43,7 +43,7 @@ use workspace::{ ItemNavHistory, Pane, ToolbarItemLocation, Workspace, }; -actions!(Deploy, ToggleWarnings); +actions!(diagnostics, [Deploy, ToggleWarnings]); const CONTEXT_LINE_COUNT: u32 = 1; diff --git a/crates/editor2/src/editor.rs b/crates/editor2/src/editor.rs index 46d64fcf9d..913b899312 100644 --- a/crates/editor2/src/editor.rs +++ b/crates/editor2/src/editor.rs @@ -277,121 +277,124 @@ impl InlayId { } actions!( - AddSelectionAbove, - AddSelectionBelow, - Backspace, - Cancel, - ConfirmRename, - ContextMenuFirst, - ContextMenuLast, - ContextMenuNext, - ContextMenuPrev, - ConvertToKebabCase, - ConvertToLowerCamelCase, - ConvertToLowerCase, - ConvertToSnakeCase, - ConvertToTitleCase, - ConvertToUpperCamelCase, - ConvertToUpperCase, - Copy, - CopyHighlightJson, - CopyPath, - CopyRelativePath, - Cut, - CutToEndOfLine, - Delete, - DeleteLine, - DeleteToBeginningOfLine, - DeleteToEndOfLine, - DeleteToNextSubwordEnd, - DeleteToNextWordEnd, - DeleteToPreviousSubwordStart, - DeleteToPreviousWordStart, - DuplicateLine, - FindAllReferences, - Fold, - FoldSelectedRanges, - Format, - GoToDefinition, - GoToDefinitionSplit, - GoToDiagnostic, - GoToHunk, - GoToPrevDiagnostic, - GoToPrevHunk, - GoToTypeDefinition, - GoToTypeDefinitionSplit, - HalfPageDown, - HalfPageUp, - Hover, - Indent, - JoinLines, - LineDown, - LineUp, - MoveDown, - MoveLeft, - MoveLineDown, - MoveLineUp, - MoveRight, - MoveToBeginning, - MoveToBeginningOfLine, - MoveToEnclosingBracket, - MoveToEnd, - MoveToEndOfLine, - MoveToEndOfParagraph, - MoveToNextSubwordEnd, - MoveToNextWordEnd, - MoveToPreviousSubwordStart, - MoveToPreviousWordStart, - MoveToStartOfParagraph, - MoveUp, - Newline, - NewlineAbove, - NewlineBelow, - NextScreen, - OpenExcerpts, - Outdent, - PageDown, - PageUp, - Paste, - Redo, - RedoSelection, - Rename, - RestartLanguageServer, - RevealInFinder, - ReverseLines, - ScrollCursorBottom, - ScrollCursorCenter, - ScrollCursorTop, - SelectAll, - SelectDown, - SelectLargerSyntaxNode, - SelectLeft, - SelectLine, - SelectRight, - SelectSmallerSyntaxNode, - SelectToBeginning, - SelectToEnd, - SelectToEndOfParagraph, - SelectToNextSubwordEnd, - SelectToNextWordEnd, - SelectToPreviousSubwordStart, - SelectToPreviousWordStart, - SelectToStartOfParagraph, - SelectUp, - ShowCharacterPalette, - ShowCompletions, - ShuffleLines, - SortLinesCaseInsensitive, - SortLinesCaseSensitive, - SplitSelectionIntoLines, - Tab, - TabPrev, - ToggleInlayHints, - ToggleSoftWrap, - Transpose, - Undo, - UndoSelection, - UnfoldLines, + editor, + [ + AddSelectionAbove, + AddSelectionBelow, + Backspace, + Cancel, + ConfirmRename, + ContextMenuFirst, + ContextMenuLast, + ContextMenuNext, + ContextMenuPrev, + ConvertToKebabCase, + ConvertToLowerCamelCase, + ConvertToLowerCase, + ConvertToSnakeCase, + ConvertToTitleCase, + ConvertToUpperCamelCase, + ConvertToUpperCase, + Copy, + CopyHighlightJson, + CopyPath, + CopyRelativePath, + Cut, + CutToEndOfLine, + Delete, + DeleteLine, + DeleteToBeginningOfLine, + DeleteToEndOfLine, + DeleteToNextSubwordEnd, + DeleteToNextWordEnd, + DeleteToPreviousSubwordStart, + DeleteToPreviousWordStart, + DuplicateLine, + FindAllReferences, + Fold, + FoldSelectedRanges, + Format, + GoToDefinition, + GoToDefinitionSplit, + GoToDiagnostic, + GoToHunk, + GoToPrevDiagnostic, + GoToPrevHunk, + GoToTypeDefinition, + GoToTypeDefinitionSplit, + HalfPageDown, + HalfPageUp, + Hover, + Indent, + JoinLines, + LineDown, + LineUp, + MoveDown, + MoveLeft, + MoveLineDown, + MoveLineUp, + MoveRight, + MoveToBeginning, + MoveToBeginningOfLine, + MoveToEnclosingBracket, + MoveToEnd, + MoveToEndOfLine, + MoveToEndOfParagraph, + MoveToNextSubwordEnd, + MoveToNextWordEnd, + MoveToPreviousSubwordStart, + MoveToPreviousWordStart, + MoveToStartOfParagraph, + MoveUp, + Newline, + NewlineAbove, + NewlineBelow, + NextScreen, + OpenExcerpts, + Outdent, + PageDown, + PageUp, + Paste, + Redo, + RedoSelection, + Rename, + RestartLanguageServer, + RevealInFinder, + ReverseLines, + ScrollCursorBottom, + ScrollCursorCenter, + ScrollCursorTop, + SelectAll, + SelectDown, + SelectLargerSyntaxNode, + SelectLeft, + SelectLine, + SelectRight, + SelectSmallerSyntaxNode, + SelectToBeginning, + SelectToEnd, + SelectToEndOfParagraph, + SelectToNextSubwordEnd, + SelectToNextWordEnd, + SelectToPreviousSubwordStart, + SelectToPreviousWordStart, + SelectToStartOfParagraph, + SelectUp, + ShowCharacterPalette, + ShowCompletions, + ShuffleLines, + SortLinesCaseInsensitive, + SortLinesCaseSensitive, + SplitSelectionIntoLines, + Tab, + TabPrev, + ToggleInlayHints, + ToggleSoftWrap, + Transpose, + Undo, + UndoSelection, + UnfoldLines, + ] ); enum DocumentHighlightRead {} diff --git a/crates/editor2/src/hover_popover.rs b/crates/editor2/src/hover_popover.rs index 2f2e8ee937..3a53a1bd1d 100644 --- a/crates/editor2/src/hover_popover.rs +++ b/crates/editor2/src/hover_popover.rs @@ -26,7 +26,7 @@ pub const MIN_POPOVER_CHARACTER_WIDTH: f32 = 20.; pub const MIN_POPOVER_LINE_HEIGHT: Pixels = px(4.); pub const HOVER_POPOVER_GAP: Pixels = px(10.); -actions!(Hover); +actions!(editor, [Hover]); /// Bindable action which uses the most recent selection head to trigger a hover pub fn hover(editor: &mut Editor, _: &Hover, cx: &mut ViewContext) { diff --git a/crates/feedback2/src/feedback2.rs b/crates/feedback2/src/feedback2.rs index 1a1bd93526..58e68e2197 100644 --- a/crates/feedback2/src/feedback2.rs +++ b/crates/feedback2/src/feedback2.rs @@ -5,15 +5,18 @@ use workspace::Workspace; pub mod deploy_feedback_button; pub mod feedback_modal; -actions!(GiveFeedback, SubmitFeedback); +actions!(feedback, [GiveFeedback, SubmitFeedback]); mod system_specs; actions!( - CopySystemSpecsIntoClipboard, - FileBugReport, - RequestFeature, - OpenZedCommunityRepo + zed, + [ + CopySystemSpecsIntoClipboard, + FileBugReport, + RequestFeature, + OpenZedCommunityRepo + ] ); pub fn init(cx: &mut AppContext) { diff --git a/crates/file_finder2/src/file_finder.rs b/crates/file_finder2/src/file_finder.rs index 7324b3667a..a9619530c6 100644 --- a/crates/file_finder2/src/file_finder.rs +++ b/crates/file_finder2/src/file_finder.rs @@ -19,7 +19,7 @@ use ui::{prelude::*, HighlightedLabel, ListItem}; use util::{paths::PathLikeWithPosition, post_inc, ResultExt}; use workspace::{ModalView, Workspace}; -actions!(Toggle); +actions!(file_finder, [Toggle]); impl ModalView for FileFinder {} diff --git a/crates/go_to_line2/src/go_to_line.rs b/crates/go_to_line2/src/go_to_line.rs index 1a64b29c4c..8d3a718ca0 100644 --- a/crates/go_to_line2/src/go_to_line.rs +++ b/crates/go_to_line2/src/go_to_line.rs @@ -10,7 +10,7 @@ use ui::{h_stack, prelude::*, v_stack, Label}; use util::paths::FILE_ROW_COLUMN_DELIMITER; use workspace::ModalView; -actions!(Toggle); +actions!(go_to_line, [Toggle]); pub fn init(cx: &mut AppContext) { cx.observe_new_views(GoToLine::register).detach(); diff --git a/crates/gpui2/docs/key_dispatch.md b/crates/gpui2/docs/key_dispatch.md index 339eb43028..daf6f820cd 100644 --- a/crates/gpui2/docs/key_dispatch.md +++ b/crates/gpui2/docs/key_dispatch.md @@ -22,7 +22,7 @@ Actions are frequently unit structs, for which we have a macro. The above could ```rust mod menu { - actions!(MoveUp, MoveDown); + actions!(gpui, [MoveUp, MoveDown]); } ``` diff --git a/crates/gpui2/src/action.rs b/crates/gpui2/src/action.rs index 03ef2d2281..ce01fbaf22 100644 --- a/crates/gpui2/src/action.rs +++ b/crates/gpui2/src/action.rs @@ -158,17 +158,65 @@ impl ActionRegistry { /// To use more complex data types as actions, annotate your type with the #[action] macro. #[macro_export] macro_rules! actions { - () => {}; + ($namespace:path, [ $($name:ident),* $(,)? ]) => { + $( + #[derive(::std::cmp::PartialEq, ::std::clone::Clone, ::std::default::Default, gpui::serde_derive::Deserialize)] + #[serde(crate = "gpui::serde")] + #[gpui::register_action] + pub struct $name; - ( $name:ident ) => { - #[derive(::std::cmp::PartialEq, ::std::clone::Clone, ::std::default::Default, gpui::serde_derive::Deserialize, gpui::Action)] - #[serde(crate = "gpui::serde")] - pub struct $name; + gpui::__impl_action!($namespace, $name, + fn build(_: gpui::serde_json::Value) -> gpui::Result<::std::boxed::Box> { + Ok(Box::new(Self)) + } + ); + )* }; +} - ( $name:ident, $($rest:tt)* ) => { - actions!($name); - actions!($($rest)*); +#[doc(hidden)] +#[macro_export] +macro_rules! __impl_action { + ($namespace:path, $name:ident, $build:item) => { + impl gpui::Action for $name { + fn name(&self) -> &'static str + { + concat!( + stringify!($namespace), + "::", + stringify!($name), + ) + } + + // todo!() why is this needed in addition to name? + fn debug_name() -> &'static str + where + Self: ::std::marker::Sized + { + concat!( + stringify!($namespace), + "::", + stringify!($name), + ) + } + + $build + + fn partial_eq(&self, action: &dyn gpui::Action) -> bool { + action + .as_any() + .downcast_ref::() + .map_or(false, |a| self == a) + } + + fn boxed_clone(&self) -> std::boxed::Box { + ::std::boxed::Box::new(self.clone()) + } + + fn as_any(&self) -> &dyn ::std::any::Any { + self + } + } }; } @@ -186,5 +234,5 @@ pub fn remove_the_2(action_name: &str) -> String { mod no_action { use crate as gpui; - actions!(NoAction); + actions!(zed, [NoAction]); } diff --git a/crates/gpui2/src/interactive.rs b/crates/gpui2/src/interactive.rs index 84636630f3..fee4403a02 100644 --- a/crates/gpui2/src/interactive.rs +++ b/crates/gpui2/src/interactive.rs @@ -302,7 +302,7 @@ mod test { focus_handle: FocusHandle, } - actions!(TestAction); + actions!(test, [TestAction]); impl Render for TestView { type Element = Stateful
; diff --git a/crates/gpui2/src/keymap/context.rs b/crates/gpui2/src/keymap/context.rs index b9cb0384ec..057de5f71f 100644 --- a/crates/gpui2/src/keymap/context.rs +++ b/crates/gpui2/src/keymap/context.rs @@ -293,11 +293,13 @@ mod tests { #[test] fn test_actions_definition() { { - actions!(A, B, C, D, E, F, G); + actions!(test, [A, B, C, D, E, F, G]); } { actions!( + test, + [ A, B, C, @@ -305,6 +307,7 @@ mod tests { E, F, G, // Don't wrap, test the trailing comma + ] ); } } diff --git a/crates/gpui2_macros/src/register_action.rs b/crates/gpui2_macros/src/register_action.rs index 3d398c873c..f25f867a74 100644 --- a/crates/gpui2_macros/src/register_action.rs +++ b/crates/gpui2_macros/src/register_action.rs @@ -78,7 +78,7 @@ pub(crate) fn register_action(type_name: &Ident) -> proc_macro2::TokenStream { #[doc(hidden)] fn #action_builder_fn_name() -> gpui::ActionData { gpui::ActionData { - name: ::std::any::type_name::<#type_name>(), + name: <#type_name as gpui::Action>::debug_name(), type_id: ::std::any::TypeId::of::<#type_name>(), build: <#type_name as gpui::Action>::build, } diff --git a/crates/install_cli2/src/install_cli2.rs b/crates/install_cli2/src/install_cli2.rs index 6fd1019c3f..e1dff2c52b 100644 --- a/crates/install_cli2/src/install_cli2.rs +++ b/crates/install_cli2/src/install_cli2.rs @@ -3,7 +3,7 @@ use gpui::{actions, AsyncAppContext}; use std::path::Path; use util::ResultExt; -actions!(Install); +actions!(cli, [Install]); pub async fn install_cli(cx: &AsyncAppContext) -> Result<()> { let cli_path = cx.update(|cx| cx.path_for_auxiliary_executable("cli"))??; diff --git a/crates/language_selector2/src/language_selector.rs b/crates/language_selector2/src/language_selector.rs index 1ba989ba5d..8b28eab11d 100644 --- a/crates/language_selector2/src/language_selector.rs +++ b/crates/language_selector2/src/language_selector.rs @@ -16,7 +16,7 @@ use ui::{prelude::*, HighlightedLabel, ListItem}; use util::ResultExt; use workspace::{ModalView, Workspace}; -actions!(Toggle); +actions!(language_selector, [Toggle]); pub fn init(cx: &mut AppContext) { cx.observe_new_views(LanguageSelector::register).detach(); diff --git a/crates/menu2/src/menu2.rs b/crates/menu2/src/menu2.rs index 6dfcce5d4f..a0e8abfabd 100644 --- a/crates/menu2/src/menu2.rs +++ b/crates/menu2/src/menu2.rs @@ -10,12 +10,15 @@ use gpui::actions; pub fn init() {} actions!( - Cancel, - Confirm, - SecondaryConfirm, - SelectPrev, - SelectNext, - SelectFirst, - SelectLast, - ShowContextMenu + menu, + [ + Cancel, + Confirm, + SecondaryConfirm, + SelectPrev, + SelectNext, + SelectFirst, + SelectLast, + ShowContextMenu + ] ); diff --git a/crates/outline2/src/outline.rs b/crates/outline2/src/outline.rs index bfa93d2099..5fce79e432 100644 --- a/crates/outline2/src/outline.rs +++ b/crates/outline2/src/outline.rs @@ -22,7 +22,7 @@ use ui::{prelude::*, ListItem}; use util::ResultExt; use workspace::{ModalView, Workspace}; -actions!(Toggle); +actions!(outline, [Toggle]); pub fn init(cx: &mut AppContext) { cx.observe_new_views(OutlineView::register).detach(); diff --git a/crates/project_panel2/src/project_panel.rs b/crates/project_panel2/src/project_panel.rs index 41a5c544a9..75c7d6ed85 100644 --- a/crates/project_panel2/src/project_panel.rs +++ b/crates/project_panel2/src/project_panel.rs @@ -103,23 +103,26 @@ pub struct EntryDetails { } actions!( - ExpandSelectedEntry, - CollapseSelectedEntry, - CollapseAllEntries, - NewDirectory, - NewFile, - Copy, - CopyPath, - CopyRelativePath, - RevealInFinder, - OpenInTerminal, - Cut, - Paste, - Delete, - Rename, - Open, - ToggleFocus, - NewSearchInDirectory, + project_panel, + [ + ExpandSelectedEntry, + CollapseSelectedEntry, + CollapseAllEntries, + NewDirectory, + NewFile, + Copy, + CopyPath, + CopyRelativePath, + RevealInFinder, + OpenInTerminal, + Cut, + Paste, + Delete, + Rename, + Open, + ToggleFocus, + NewSearchInDirectory, + ] ); pub fn init_settings(cx: &mut AppContext) { diff --git a/crates/recent_projects2/src/projects.rs b/crates/recent_projects2/src/projects.rs index 2c4809dbd7..d9cfbd08ad 100644 --- a/crates/recent_projects2/src/projects.rs +++ b/crates/recent_projects2/src/projects.rs @@ -1 +1 @@ -gpui::actions!(OpenRecent); +gpui::actions!(projects, [OpenRecent]); diff --git a/crates/search2/src/buffer_search.rs b/crates/search2/src/buffer_search.rs index ccbec98c5d..33f246ef35 100644 --- a/crates/search2/src/buffer_search.rs +++ b/crates/search2/src/buffer_search.rs @@ -31,7 +31,7 @@ pub struct Deploy { pub focus: bool, } -actions!(Dismiss, FocusEditor); +actions!(buffer_search, [Dismiss, FocusEditor]); pub enum Event { UpdateLocation, diff --git a/crates/search2/src/search.rs b/crates/search2/src/search.rs index c98a033c72..5921bb059a 100644 --- a/crates/search2/src/search.rs +++ b/crates/search2/src/search.rs @@ -22,20 +22,23 @@ pub fn init(cx: &mut AppContext) { } actions!( - CycleMode, - ToggleWholeWord, - ToggleCaseSensitive, - ToggleReplace, - SelectNextMatch, - SelectPrevMatch, - SelectAllMatches, - NextHistoryQuery, - PreviousHistoryQuery, - ActivateTextMode, - ActivateSemanticMode, - ActivateRegexMode, - ReplaceAll, - ReplaceNext, + search, + [ + CycleMode, + ToggleWholeWord, + ToggleCaseSensitive, + ToggleReplace, + SelectNextMatch, + SelectPrevMatch, + SelectAllMatches, + NextHistoryQuery, + PreviousHistoryQuery, + ActivateTextMode, + ActivateSemanticMode, + ActivateRegexMode, + ReplaceAll, + ReplaceNext, + ] ); bitflags! { diff --git a/crates/settings2/src/keymap_file.rs b/crates/settings2/src/keymap_file.rs index 93635935cb..79771e3e3f 100644 --- a/crates/settings2/src/keymap_file.rs +++ b/crates/settings2/src/keymap_file.rs @@ -1,7 +1,7 @@ use crate::{settings_store::parse_json_with_comments, SettingsAssets}; use anyhow::{anyhow, Context, Result}; use collections::BTreeMap; -use gpui::{actions, Action, AppContext, KeyBinding, SharedString}; +use gpui::{Action, AppContext, KeyBinding, SharedString}; use schemars::{ gen::{SchemaGenerator, SchemaSettings}, schema::{InstanceType, Schema, SchemaObject, SingleOrVec, SubschemaValidation}, @@ -137,10 +137,8 @@ impl KeymapFile { } } -actions!(NoAction); - fn no_action() -> Box { - NoAction.boxed_clone() + gpui::NoAction.boxed_clone() } #[cfg(test)] diff --git a/crates/storybook2/src/stories/focus.rs b/crates/storybook2/src/stories/focus.rs index 7b375b10e3..787de727ea 100644 --- a/crates/storybook2/src/stories/focus.rs +++ b/crates/storybook2/src/stories/focus.rs @@ -4,7 +4,7 @@ use gpui::{ }; use ui::prelude::*; -actions!(ActionA, ActionB, ActionC); +actions!(focus, [ActionA, ActionB, ActionC]); pub struct FocusStory { child_1_focus: FocusHandle, diff --git a/crates/terminal2/src/terminal2.rs b/crates/terminal2/src/terminal2.rs index b429bda710..9d3c00d81f 100644 --- a/crates/terminal2/src/terminal2.rs +++ b/crates/terminal2/src/terminal2.rs @@ -59,13 +59,16 @@ use crate::mappings::{colors::to_alac_rgb, keys::to_esc_str}; use lazy_static::lazy_static; actions!( - Clear, - Copy, - Paste, - ShowCharacterPalette, - SearchTest, - SendText, - SendKeystroke, + terminal, + [ + Clear, + Copy, + Paste, + ShowCharacterPalette, + SearchTest, + SendText, + SendKeystroke, + ] ); ///Scrolling is unbearably sluggish by default. Alacritty supports a configurable diff --git a/crates/terminal_view2/src/terminal_panel.rs b/crates/terminal_view2/src/terminal_panel.rs index b8db12381b..3d88b89d9b 100644 --- a/crates/terminal_view2/src/terminal_panel.rs +++ b/crates/terminal_view2/src/terminal_panel.rs @@ -24,7 +24,7 @@ use anyhow::Result; const TERMINAL_PANEL_KEY: &'static str = "TerminalPanel"; -actions!(ToggleFocus); +actions!(terminal_view, [ToggleFocus]); pub fn init(cx: &mut AppContext) { cx.observe_new_views( diff --git a/crates/theme_selector2/src/theme_selector.rs b/crates/theme_selector2/src/theme_selector.rs index 6898b687a9..e0cdc45555 100644 --- a/crates/theme_selector2/src/theme_selector.rs +++ b/crates/theme_selector2/src/theme_selector.rs @@ -13,7 +13,7 @@ use ui::{prelude::*, v_stack, ListItem}; use util::ResultExt; use workspace::{ui::HighlightedLabel, ModalView, Workspace}; -actions!(Toggle, Reload); +actions!(theme_selector, [Toggle, Reload]); pub fn init(cx: &mut AppContext) { cx.observe_new_views( diff --git a/crates/ui2/src/components/stories/context_menu.rs b/crates/ui2/src/components/stories/context_menu.rs index dd1fe8d565..cae5939f2a 100644 --- a/crates/ui2/src/components/stories/context_menu.rs +++ b/crates/ui2/src/components/stories/context_menu.rs @@ -4,7 +4,7 @@ use story::Story; use crate::prelude::*; use crate::{right_click_menu, ContextMenu, Label}; -actions!(PrintCurrentDate, PrintBestFood); +actions!(context_menu, [PrintCurrentDate, PrintBestFood]); fn build_menu(cx: &mut WindowContext, header: impl Into) -> View { ContextMenu::build(cx, |menu, _| { diff --git a/crates/ui2/src/components/stories/keybinding.rs b/crates/ui2/src/components/stories/keybinding.rs index b1b3401f17..520749bc85 100644 --- a/crates/ui2/src/components/stories/keybinding.rs +++ b/crates/ui2/src/components/stories/keybinding.rs @@ -1,4 +1,5 @@ -use gpui::{actions, Div, Render}; +use gpui::NoAction; +use gpui::{Div, Render}; use itertools::Itertools; use story::Story; @@ -7,8 +8,6 @@ use crate::KeyBinding; pub struct KeybindingStory; -actions!(NoAction); - pub fn binding(key: &str) -> gpui::KeyBinding { gpui::KeyBinding::new(key, NoAction {}, None) } diff --git a/crates/welcome2/src/base_keymap_picker.rs b/crates/welcome2/src/base_keymap_picker.rs index 9e672de69d..7f799c6339 100644 --- a/crates/welcome2/src/base_keymap_picker.rs +++ b/crates/welcome2/src/base_keymap_picker.rs @@ -12,7 +12,7 @@ use ui::{prelude::*, ListItem}; use util::ResultExt; use workspace::{ui::HighlightedLabel, ModalView, Workspace}; -actions!(ToggleBaseKeymapSelector); +actions!(welcome, [ToggleBaseKeymapSelector]); pub fn init(cx: &mut AppContext) { cx.observe_new_views(|workspace: &mut Workspace, _cx| { diff --git a/crates/workspace2/src/dock.rs b/crates/workspace2/src/dock.rs index 7bae7bc419..5a7097b86f 100644 --- a/crates/workspace2/src/dock.rs +++ b/crates/workspace2/src/dock.rs @@ -770,7 +770,7 @@ pub mod test { pub focus_handle: FocusHandle, pub size: f32, } - actions!(ToggleTestPanel); + actions!(test, [ToggleTestPanel]); impl EventEmitter for TestPanel {} diff --git a/crates/workspace2/src/pane.rs b/crates/workspace2/src/pane.rs index 713fa711ad..3c81e6aa26 100644 --- a/crates/workspace2/src/pane.rs +++ b/crates/workspace2/src/pane.rs @@ -87,22 +87,24 @@ pub struct CloseAllItems { pub save_intent: Option, } -// todo!(These used to be under pane::{Action}. Are they now workspace::pane::{Action}?) actions!( - ActivatePrevItem, - ActivateNextItem, - ActivateLastItem, - CloseInactiveItems, - CloseCleanItems, - CloseItemsToTheLeft, - CloseItemsToTheRight, - GoBack, - GoForward, - ReopenClosedItem, - SplitLeft, - SplitUp, - SplitRight, - SplitDown, + pane, + [ + ActivatePrevItem, + ActivateNextItem, + ActivateLastItem, + CloseInactiveItems, + CloseCleanItems, + CloseItemsToTheLeft, + CloseItemsToTheRight, + GoBack, + GoForward, + ReopenClosedItem, + SplitLeft, + SplitUp, + SplitRight, + SplitDown, + ] ); const MAX_NAVIGATION_HISTORY_LEN: usize = 1024; diff --git a/crates/workspace2/src/workspace2.rs b/crates/workspace2/src/workspace2.rs index 012c881e5b..f0f39f6f6b 100644 --- a/crates/workspace2/src/workspace2.rs +++ b/crates/workspace2/src/workspace2.rs @@ -91,30 +91,33 @@ lazy_static! { pub struct RemoveWorktreeFromProject(pub WorktreeId); actions!( - Open, - NewFile, - NewWindow, - CloseWindow, - CloseInactiveTabsAndPanes, - AddFolderToProject, - Unfollow, - SaveAs, - ReloadActiveItem, - ActivatePreviousPane, - ActivateNextPane, - FollowNextCollaborator, - NewTerminal, - NewCenterTerminal, - ToggleTerminalFocus, - NewSearch, - Feedback, - Restart, - Welcome, - ToggleZoom, - ToggleLeftDock, - ToggleRightDock, - ToggleBottomDock, - CloseAllDocks, + workspace, + [ + Open, + NewFile, + NewWindow, + CloseWindow, + CloseInactiveTabsAndPanes, + AddFolderToProject, + Unfollow, + SaveAs, + ReloadActiveItem, + ActivatePreviousPane, + ActivateNextPane, + FollowNextCollaborator, + NewTerminal, + NewCenterTerminal, + ToggleTerminalFocus, + NewSearch, + Feedback, + Restart, + Welcome, + ToggleZoom, + ToggleLeftDock, + ToggleRightDock, + ToggleBottomDock, + CloseAllDocks, + ] ); #[derive(Clone, PartialEq)] diff --git a/crates/zed2/src/zed2.rs b/crates/zed2/src/zed2.rs index 0af5777f17..d5edbc6f8d 100644 --- a/crates/zed2/src/zed2.rs +++ b/crates/zed2/src/zed2.rs @@ -43,27 +43,30 @@ use workspace::{ use zed_actions::{OpenBrowser, OpenZedURL}; actions!( - About, - DebugElements, - DecreaseBufferFontSize, - Hide, - HideOthers, - IncreaseBufferFontSize, - Minimize, - OpenDefaultKeymap, - OpenDefaultSettings, - OpenKeymap, - OpenLicenses, - OpenLocalSettings, - OpenLog, - OpenSettings, - OpenTelemetryLog, - Quit, - ResetBufferFontSize, - ResetDatabase, - ShowAll, - ToggleFullScreen, - Zoom, + zed, + [ + About, + DebugElements, + DecreaseBufferFontSize, + Hide, + HideOthers, + IncreaseBufferFontSize, + Minimize, + OpenDefaultKeymap, + OpenDefaultSettings, + OpenKeymap, + OpenLicenses, + OpenLocalSettings, + OpenLog, + OpenSettings, + OpenTelemetryLog, + Quit, + ResetBufferFontSize, + ResetDatabase, + ShowAll, + ToggleFullScreen, + Zoom, + ] ); pub fn build_window_options(