Detailed changes
@@ -45,22 +45,22 @@
"ctrl-alt-z": "edit_prediction::RatePredictions",
"ctrl-alt-shift-i": "edit_prediction::ToggleMenu",
"ctrl-alt-l": "lsp_tool::ToggleMenu",
- "ctrl-alt-shift-s": "workspace::ToggleWorktreeSecurity",
- },
+ "ctrl-alt-shift-s": "workspace::ToggleWorktreeSecurity"
+ }
},
{
"context": "Picker || menu",
"bindings": {
"up": "menu::SelectPrevious",
- "down": "menu::SelectNext",
- },
+ "down": "menu::SelectNext"
+ }
},
{
"context": "menu",
"bindings": {
"right": "menu::SelectChild",
- "left": "menu::SelectParent",
- },
+ "left": "menu::SelectParent"
+ }
},
{
"context": "Editor",
@@ -133,8 +133,8 @@
"shift-f10": "editor::OpenContextMenu",
"ctrl-alt-shift-e": "editor::ToggleEditPrediction",
"f9": "editor::ToggleBreakpoint",
- "shift-f9": "editor::EditLogBreakpoint",
- },
+ "shift-f9": "editor::EditLogBreakpoint"
+ }
},
{
"context": "Editor && mode == full",
@@ -153,44 +153,44 @@
"ctrl-alt-e": "editor::SelectEnclosingSymbol",
"ctrl-shift-backspace": "editor::GoToPreviousChange",
"ctrl-shift-alt-backspace": "editor::GoToNextChange",
- "alt-enter": "editor::OpenSelectionsInMultibuffer",
- },
+ "alt-enter": "editor::OpenSelectionsInMultibuffer"
+ }
},
{
"context": "Editor && mode == full && edit_prediction",
"bindings": {
"alt-]": "editor::NextEditPrediction",
- "alt-[": "editor::PreviousEditPrediction",
- },
+ "alt-[": "editor::PreviousEditPrediction"
+ }
},
{
"context": "Editor && !edit_prediction",
"bindings": {
- "alt-\\": "editor::ShowEditPrediction",
- },
+ "alt-\\": "editor::ShowEditPrediction"
+ }
},
{
"context": "Editor && mode == auto_height",
"bindings": {
"ctrl-enter": "editor::Newline",
"shift-enter": "editor::Newline",
- "ctrl-shift-enter": "editor::NewlineBelow",
- },
+ "ctrl-shift-enter": "editor::NewlineBelow"
+ }
},
{
"context": "Markdown",
"bindings": {
"copy": "markdown::Copy",
"ctrl-insert": "markdown::Copy",
- "ctrl-c": "markdown::Copy",
- },
+ "ctrl-c": "markdown::Copy"
+ }
},
{
"context": "Editor && jupyter && !ContextEditor",
"bindings": {
"ctrl-shift-enter": "repl::Run",
- "ctrl-alt-enter": "repl::RunInPlace",
- },
+ "ctrl-alt-enter": "repl::RunInPlace"
+ }
},
{
"context": "Editor && !agent_diff",
@@ -198,8 +198,8 @@
"ctrl-k ctrl-r": "git::Restore",
"ctrl-alt-y": "git::ToggleStaged",
"alt-y": "git::StageAndNext",
- "alt-shift-y": "git::UnstageAndNext",
- },
+ "alt-shift-y": "git::UnstageAndNext"
+ }
},
{
"context": "Editor && editor_agent_diff",
@@ -209,8 +209,8 @@
"ctrl-alt-z": "agent::Reject",
"shift-alt-y": "agent::KeepAll",
"shift-alt-z": "agent::RejectAll",
- "shift-ctrl-r": "agent::OpenAgentDiff",
- },
+ "shift-ctrl-r": "agent::OpenAgentDiff"
+ }
},
{
"context": "AgentDiff",
@@ -219,8 +219,8 @@
"ctrl-alt-y": "agent::Keep",
"ctrl-alt-z": "agent::Reject",
"shift-alt-y": "agent::KeepAll",
- "shift-alt-z": "agent::RejectAll",
- },
+ "shift-alt-z": "agent::RejectAll"
+ }
},
{
"context": "ContextEditor > Editor",
@@ -237,8 +237,8 @@
"ctrl-g": "search::SelectNextMatch",
"ctrl-shift-g": "search::SelectPreviousMatch",
"ctrl-k l": "agent::OpenRulesLibrary",
- "ctrl-shift-v": "agent::PasteRaw",
- },
+ "ctrl-shift-v": "agent::PasteRaw"
+ }
},
{
"context": "AgentPanel",
@@ -265,51 +265,51 @@
"ctrl-shift-enter": "agent::ContinueThread",
"ctrl-y": "agent::AllowOnce",
"ctrl-alt-a": "agent::OpenPermissionDropdown",
- "ctrl-alt-z": "agent::RejectOnce",
- },
+ "ctrl-alt-z": "agent::RejectOnce"
+ }
},
{
"context": "AgentPanel > Markdown",
"bindings": {
"copy": "markdown::CopyAsMarkdown",
"ctrl-insert": "markdown::CopyAsMarkdown",
- "ctrl-c": "markdown::CopyAsMarkdown",
- },
+ "ctrl-c": "markdown::CopyAsMarkdown"
+ }
},
{
"context": "AgentPanel && text_thread",
"bindings": {
"ctrl-n": "agent::NewTextThread",
- "ctrl-alt-t": "agent::NewThread",
- },
+ "ctrl-alt-t": "agent::NewThread"
+ }
},
{
"context": "AgentPanel && acp_thread",
"use_key_equivalents": true,
"bindings": {
"ctrl-n": "agent::NewExternalAgentThread",
- "ctrl-alt-t": "agent::NewThread",
- },
+ "ctrl-alt-t": "agent::NewThread"
+ }
},
{
"context": "AgentFeedbackMessageEditor > Editor",
"bindings": {
"escape": "menu::Cancel",
"enter": "menu::Confirm",
- "alt-enter": "editor::Newline",
- },
+ "alt-enter": "editor::Newline"
+ }
},
{
"context": "AcpThread > ModeSelector",
"bindings": {
- "ctrl-enter": "menu::Confirm",
- },
+ "ctrl-enter": "menu::Confirm"
+ }
},
{
"context": "AcpThread",
"bindings": {
- "ctrl--": "pane::GoBack",
- },
+ "ctrl--": "pane::GoBack"
+ }
},
{
"context": "AcpThread > Editor",
@@ -336,29 +336,29 @@
"ctrl-alt-k": "agent::ToggleThinkingMode",
"ctrl-alt-'": "agent::ToggleThinkingEffortMenu",
"ctrl-'": "agent::CycleThinkingEffort",
- "ctrl-alt-.": "agent::ToggleFastMode",
- },
+ "ctrl-alt-.": "agent::ToggleFastMode"
+ }
},
{
"context": "AcpThread > Editor && !use_modifier_to_send",
"use_key_equivalents": true,
"bindings": {
- "enter": "agent::Chat",
- },
+ "enter": "agent::Chat"
+ }
},
{
"context": "AcpThread > Editor && use_modifier_to_send",
"use_key_equivalents": true,
"bindings": {
"ctrl-enter": "agent::Chat",
- "enter": "editor::Newline",
- },
+ "enter": "editor::Newline"
+ }
},
{
"context": "ThreadHistory",
"bindings": {
- "backspace": "agent::RemoveSelectedThread",
- },
+ "backspace": "agent::RemoveSelectedThread"
+ }
},
{
"context": "RulesLibrary",
@@ -366,8 +366,8 @@
"new": "rules_library::NewRule",
"ctrl-n": "rules_library::NewRule",
"ctrl-shift-s": "rules_library::ToggleDefaultRule",
- "ctrl-w": "workspace::CloseWindow",
- },
+ "ctrl-w": "workspace::CloseWindow"
+ }
},
{
"context": "BufferSearchBar",
@@ -381,22 +381,22 @@
"find": "search::FocusSearch",
"ctrl-f": "search::FocusSearch",
"ctrl-h": "search::ToggleReplace",
- "ctrl-l": "search::ToggleSelection",
- },
+ "ctrl-l": "search::ToggleSelection"
+ }
},
{
"context": "BufferSearchBar && in_replace > Editor",
"bindings": {
"enter": "search::ReplaceNext",
- "ctrl-enter": "search::ReplaceAll",
- },
+ "ctrl-enter": "search::ReplaceAll"
+ }
},
{
"context": "BufferSearchBar && !in_replace > Editor",
"bindings": {
"up": "search::PreviousHistoryQuery",
- "down": "search::NextHistoryQuery",
- },
+ "down": "search::NextHistoryQuery"
+ }
},
{
"context": "ProjectSearchBar",
@@ -407,22 +407,22 @@
"ctrl-shift-f": "search::FocusSearch",
"ctrl-shift-h": "search::ToggleReplace",
"alt-ctrl-g": "search::ToggleRegex",
- "alt-ctrl-x": "search::ToggleRegex",
- },
+ "alt-ctrl-x": "search::ToggleRegex"
+ }
},
{
"context": "ProjectSearchBar > Editor",
"bindings": {
"up": "search::PreviousHistoryQuery",
- "down": "search::NextHistoryQuery",
- },
+ "down": "search::NextHistoryQuery"
+ }
},
{
"context": "ProjectSearchBar && in_replace > Editor",
"bindings": {
"enter": "search::ReplaceNext",
- "ctrl-alt-enter": "search::ReplaceAll",
- },
+ "ctrl-alt-enter": "search::ReplaceAll"
+ }
},
{
"context": "ProjectSearchView",
@@ -430,8 +430,8 @@
"escape": "project_search::ToggleFocus",
"ctrl-shift-h": "search::ToggleReplace",
"alt-ctrl-g": "search::ToggleRegex",
- "alt-ctrl-x": "search::ToggleRegex",
- },
+ "alt-ctrl-x": "search::ToggleRegex"
+ }
},
{
"context": "Pane",
@@ -480,8 +480,8 @@
"ctrl-alt-shift-r": "search::ToggleRegex",
"ctrl-alt-shift-x": "search::ToggleRegex",
"alt-r": "search::ToggleRegex",
- "ctrl-k shift-enter": "pane::TogglePinTab",
- },
+ "ctrl-k shift-enter": "pane::TogglePinTab"
+ }
},
// Bindings from VS Code
{
@@ -545,31 +545,31 @@
"ctrl-\\": "pane::SplitRight",
"ctrl-alt-shift-c": "editor::DisplayCursorNames",
"alt-.": "editor::GoToHunk",
- "alt-,": "editor::GoToPreviousHunk",
- },
+ "alt-,": "editor::GoToPreviousHunk"
+ }
},
{
"context": "Editor && extension == md",
"use_key_equivalents": true,
"bindings": {
"ctrl-k v": "markdown::OpenPreviewToTheSide",
- "ctrl-shift-v": "markdown::OpenPreview",
- },
+ "ctrl-shift-v": "markdown::OpenPreview"
+ }
},
{
"context": "Editor && extension == svg",
"use_key_equivalents": true,
"bindings": {
"ctrl-k v": "svg::OpenPreviewToTheSide",
- "ctrl-shift-v": "svg::OpenPreview",
- },
+ "ctrl-shift-v": "svg::OpenPreview"
+ }
},
{
"context": "Editor && mode == full",
"bindings": {
"ctrl-shift-o": "outline::Toggle",
- "ctrl-g": "go_to_line::Toggle",
- },
+ "ctrl-g": "go_to_line::Toggle"
+ }
},
{
"context": "Workspace",
@@ -608,7 +608,7 @@
"ctrl-alt-b": "workspace::ToggleRightDock",
"ctrl-b": "workspace::ToggleLeftDock",
"ctrl-j": "workspace::ToggleBottomDock",
- "ctrl-alt-j": "multi_workspace::ToggleWorkspaceSidebar",
+ "ctrl-alt-j": "agent::ToggleThreadsSidebar",
"ctrl-alt-;": "multi_workspace::FocusWorkspaceSidebar",
"ctrl-alt-y": "workspace::ToggleAllDocks",
"ctrl-alt-0": "workspace::ResetActiveDockSize",
@@ -638,7 +638,7 @@
"ctrl-shift-b": "outline_panel::ToggleFocus",
"ctrl-shift-g": "git_panel::ToggleFocus",
"ctrl-shift-d": "debug_panel::ToggleFocus",
- "ctrl-?": "agent::ToggleFocus",
+ "ctrl-?": "agent::ToggleAgentDrawer",
"alt-save": "workspace::SaveAll",
"ctrl-alt-s": "workspace::SaveAll",
"ctrl-k n": "encoding_selector::Toggle",
@@ -667,8 +667,8 @@
// "foo-bar": ["task::Spawn", { "task_tag": "MyTag" }],
"f5": "debugger::Rerun",
"ctrl-f4": "workspace::CloseActiveDock",
- "ctrl-w": "workspace::CloseActiveDock",
- },
+ "ctrl-w": "workspace::CloseActiveDock"
+ }
},
{
"context": "WorkspaceSidebar",
@@ -677,28 +677,28 @@
"ctrl-n": "multi_workspace::NewWorkspaceInWindow",
"left": "agents_sidebar::CollapseSelectedEntry",
"right": "agents_sidebar::ExpandSelectedEntry",
- "enter": "menu::Confirm",
- },
+ "enter": "menu::Confirm"
+ }
},
{
"context": "Workspace && debugger_running",
"bindings": {
- "f5": "zed::NoAction",
- },
+ "f5": "zed::NoAction"
+ }
},
{
"context": "Workspace && debugger_stopped",
"bindings": {
- "f5": "debugger::Continue",
- },
+ "f5": "debugger::Continue"
+ }
},
{
"context": "ApplicationMenu",
"bindings": {
"f10": "menu::Cancel",
"left": "app_menu::ActivateMenuLeft",
- "right": "app_menu::ActivateMenuRight",
- },
+ "right": "app_menu::ActivateMenuRight"
+ }
},
// Bindings from Sublime Text
{
@@ -716,8 +716,8 @@
"ctrl-alt-shift-left": "editor::SelectToPreviousSubwordStart",
"ctrl-alt-shift-b": "editor::SelectToPreviousSubwordStart",
"ctrl-alt-shift-right": "editor::SelectToNextSubwordEnd",
- "ctrl-alt-shift-f": "editor::SelectToNextSubwordEnd",
- },
+ "ctrl-alt-shift-f": "editor::SelectToNextSubwordEnd"
+ }
},
// Bindings from Atom
{
@@ -726,37 +726,37 @@
"ctrl-k up": "pane::SplitUp",
"ctrl-k down": "pane::SplitDown",
"ctrl-k left": "pane::SplitLeft",
- "ctrl-k right": "pane::SplitRight",
- },
+ "ctrl-k right": "pane::SplitRight"
+ }
},
// Bindings that should be unified with bindings for more general actions
{
"context": "Editor && renaming",
"bindings": {
- "enter": "editor::ConfirmRename",
- },
+ "enter": "editor::ConfirmRename"
+ }
},
{
"context": "Editor && showing_completions",
"bindings": {
"enter": "editor::ConfirmCompletion",
"shift-enter": "editor::ConfirmCompletionReplace",
- "tab": "editor::ComposeCompletion",
- },
+ "tab": "editor::ComposeCompletion"
+ }
},
{
"context": "Editor && in_snippet && has_next_tabstop && !showing_completions",
"use_key_equivalents": true,
"bindings": {
- "tab": "editor::NextSnippetTabstop",
- },
+ "tab": "editor::NextSnippetTabstop"
+ }
},
{
"context": "Editor && in_snippet && has_previous_tabstop && !showing_completions",
"use_key_equivalents": true,
"bindings": {
- "shift-tab": "editor::PreviousSnippetTabstop",
- },
+ "shift-tab": "editor::PreviousSnippetTabstop"
+ }
},
// Bindings for accepting edit predictions
//
@@ -769,8 +769,8 @@
"alt-l": "editor::AcceptEditPrediction",
"tab": "editor::AcceptEditPrediction",
"alt-k": "editor::AcceptNextWordEditPrediction",
- "alt-j": "editor::AcceptNextLineEditPrediction",
- },
+ "alt-j": "editor::AcceptNextLineEditPrediction"
+ }
},
{
"context": "Editor && edit_prediction_conflict",
@@ -778,14 +778,14 @@
"alt-tab": "editor::AcceptEditPrediction",
"alt-l": "editor::AcceptEditPrediction",
"alt-k": "editor::AcceptNextWordEditPrediction",
- "alt-j": "editor::AcceptNextLineEditPrediction",
- },
+ "alt-j": "editor::AcceptNextLineEditPrediction"
+ }
},
{
"context": "Editor && showing_code_actions",
"bindings": {
- "enter": "editor::ConfirmCodeAction",
- },
+ "enter": "editor::ConfirmCodeAction"
+ }
},
{
"context": "Editor && (showing_code_actions || showing_completions)",
@@ -795,29 +795,29 @@
"ctrl-n": "editor::ContextMenuNext",
"down": "editor::ContextMenuNext",
"pageup": "editor::ContextMenuFirst",
- "pagedown": "editor::ContextMenuLast",
- },
+ "pagedown": "editor::ContextMenuLast"
+ }
},
{
"context": "Editor && showing_signature_help && !showing_completions",
"bindings": {
"up": "editor::SignatureHelpPrevious",
- "down": "editor::SignatureHelpNext",
- },
+ "down": "editor::SignatureHelpNext"
+ }
},
// Custom bindings
{
"bindings": {
"ctrl-alt-shift-f": "workspace::FollowNextCollaborator",
// Only available in debug builds: opens an element inspector for development.
- "ctrl-alt-i": "dev::ToggleInspector",
- },
+ "ctrl-alt-i": "dev::ToggleInspector"
+ }
},
{
"context": "!Terminal",
"bindings": {
- "ctrl-shift-c": "collab_panel::ToggleFocus",
- },
+ "ctrl-shift-c": "collab_panel::ToggleFocus"
+ }
},
{
"context": "!ContextEditor && !AcpThread > Editor && mode == full",
@@ -829,8 +829,8 @@
"ctrl-f8": "editor::GoToHunk",
"ctrl-shift-f8": "editor::GoToPreviousHunk",
"ctrl-enter": "assistant::InlineAssist",
- "ctrl-:": "editor::ToggleInlayHints",
- },
+ "ctrl-:": "editor::ToggleInlayHints"
+ }
},
{
"context": "InlineAssistant",
@@ -838,8 +838,8 @@
"ctrl-[": "agent::CyclePreviousInlineAssist",
"ctrl-]": "agent::CycleNextInlineAssist",
"ctrl-shift-enter": "inline_assistant::ThumbsUpResult",
- "ctrl-shift-backspace": "inline_assistant::ThumbsDownResult",
- },
+ "ctrl-shift-backspace": "inline_assistant::ThumbsDownResult"
+ }
},
{
"context": "Prompt",
@@ -847,14 +847,14 @@
"left": "menu::SelectPrevious",
"right": "menu::SelectNext",
"h": "menu::SelectPrevious",
- "l": "menu::SelectNext",
- },
+ "l": "menu::SelectNext"
+ }
},
{
"context": "ProjectSearchBar && !in_replace",
"bindings": {
- "ctrl-enter": "project_search::SearchInNew",
- },
+ "ctrl-enter": "project_search::SearchInNew"
+ }
},
{
"context": "OutlinePanel && not_editing",
@@ -871,8 +871,8 @@
"shift-down": "menu::SelectNext",
"shift-up": "menu::SelectPrevious",
"alt-enter": "editor::OpenExcerpts",
- "ctrl-alt-enter": "editor::OpenExcerptsSplit",
- },
+ "ctrl-alt-enter": "editor::OpenExcerptsSplit"
+ }
},
{
"context": "ProjectPanel",
@@ -910,14 +910,14 @@
"ctrl-alt-shift-f": "project_panel::NewSearchInDirectory",
"shift-down": "menu::SelectNext",
"shift-up": "menu::SelectPrevious",
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "ProjectPanel && not_editing",
"bindings": {
- "space": "project_panel::Open",
- },
+ "space": "project_panel::Open"
+ }
},
{
"context": "GitPanel && ChangesList",
@@ -940,15 +940,15 @@
"backspace": ["git::RestoreFile", { "skip_prompt": false }],
"shift-delete": ["git::RestoreFile", { "skip_prompt": false }],
"ctrl-backspace": ["git::RestoreFile", { "skip_prompt": false }],
- "ctrl-delete": ["git::RestoreFile", { "skip_prompt": false }],
- },
+ "ctrl-delete": ["git::RestoreFile", { "skip_prompt": false }]
+ }
},
{
"context": "GitPanel && CommitEditor",
"use_key_equivalents": true,
"bindings": {
- "escape": "git::Cancel",
- },
+ "escape": "git::Cancel"
+ }
},
{
"context": "GitCommit > Editor",
@@ -957,8 +957,8 @@
"enter": "editor::Newline",
"ctrl-enter": "git::Commit",
"ctrl-shift-enter": "git::Amend",
- "alt-l": "git::GenerateCommitMessage",
- },
+ "alt-l": "git::GenerateCommitMessage"
+ }
},
{
"context": "GitPanel",
@@ -974,8 +974,8 @@
"ctrl-space": "git::StageAll",
"ctrl-shift-space": "git::UnstageAll",
"ctrl-enter": "git::Commit",
- "ctrl-shift-enter": "git::Amend",
- },
+ "ctrl-shift-enter": "git::Amend"
+ }
},
{
"context": "GitDiff > Editor",
@@ -984,14 +984,14 @@
"ctrl-shift-enter": "git::Amend",
"ctrl-space": "git::StageAll",
"ctrl-shift-space": "git::UnstageAll",
- "ctrl-k ctrl-r": "git::RestoreAndNext",
- },
+ "ctrl-k ctrl-r": "git::RestoreAndNext"
+ }
},
{
"context": "AskPass > Editor",
"bindings": {
- "enter": "menu::Confirm",
- },
+ "enter": "menu::Confirm"
+ }
},
{
"context": "CommitEditor > Editor",
@@ -1003,16 +1003,16 @@
"ctrl-enter": "git::Commit",
"ctrl-shift-enter": "git::Amend",
"alt-up": "git_panel::FocusChanges",
- "alt-l": "git::GenerateCommitMessage",
- },
+ "alt-l": "git::GenerateCommitMessage"
+ }
},
{
"context": "DebugPanel",
"bindings": {
"ctrl-t": "debugger::ToggleThreadPicker",
"ctrl-i": "debugger::ToggleSessionPicker",
- "shift-alt-escape": "debugger::ToggleExpandItem",
- },
+ "shift-alt-escape": "debugger::ToggleExpandItem"
+ }
},
{
"context": "VariableList",
@@ -1024,8 +1024,8 @@
"ctrl-alt-c": "variable_list::CopyVariableName",
"delete": "variable_list::RemoveWatch",
"backspace": "variable_list::RemoveWatch",
- "alt-enter": "variable_list::AddWatch",
- },
+ "alt-enter": "variable_list::AddWatch"
+ }
},
{
"context": "BreakpointList",
@@ -1033,35 +1033,35 @@
"space": "debugger::ToggleEnableBreakpoint",
"backspace": "debugger::UnsetBreakpoint",
"left": "debugger::PreviousBreakpointProperty",
- "right": "debugger::NextBreakpointProperty",
- },
+ "right": "debugger::NextBreakpointProperty"
+ }
},
{
"context": "CollabPanel && not_editing",
"bindings": {
"ctrl-backspace": "collab_panel::Remove",
- "space": "menu::Confirm",
- },
+ "space": "menu::Confirm"
+ }
},
{
"context": "CollabPanel",
"bindings": {
"alt-up": "collab_panel::MoveChannelUp",
"alt-down": "collab_panel::MoveChannelDown",
- "alt-enter": "collab_panel::OpenSelectedChannelNotes",
- },
+ "alt-enter": "collab_panel::OpenSelectedChannelNotes"
+ }
},
{
"context": "(CollabPanel && editing) > Editor",
"bindings": {
- "space": "collab_panel::InsertSpace",
- },
+ "space": "collab_panel::InsertSpace"
+ }
},
{
"context": "ChannelModal",
"bindings": {
- "tab": "channel_modal::ToggleMode",
- },
+ "tab": "channel_modal::ToggleMode"
+ }
},
{
"context": "Picker > Editor",
@@ -1070,29 +1070,29 @@
"up": "menu::SelectPrevious",
"down": "menu::SelectNext",
"tab": "picker::ConfirmCompletion",
- "alt-enter": ["picker::ConfirmInput", { "secondary": false }],
- },
+ "alt-enter": ["picker::ConfirmInput", { "secondary": false }]
+ }
},
{
"context": "ChannelModal > Picker > Editor",
"bindings": {
- "tab": "channel_modal::ToggleMode",
- },
+ "tab": "channel_modal::ToggleMode"
+ }
},
{
"context": "ToolchainSelector",
"use_key_equivalents": true,
"bindings": {
- "ctrl-shift-a": "toolchain::AddToolchain",
- },
+ "ctrl-shift-a": "toolchain::AddToolchain"
+ }
},
{
"context": "FileFinder || (FileFinder > Picker > Editor)",
"bindings": {
"ctrl-p": "file_finder::Toggle",
"ctrl-shift-a": "file_finder::ToggleSplitMenu",
- "ctrl-shift-i": "file_finder::ToggleFilterMenu",
- },
+ "ctrl-shift-i": "file_finder::ToggleFilterMenu"
+ }
},
{
"context": "FileFinder || (FileFinder > Picker > Editor) || (FileFinder > Picker > menu)",
@@ -1101,15 +1101,15 @@
"ctrl-j": "pane::SplitDown",
"ctrl-k": "pane::SplitUp",
"ctrl-h": "pane::SplitLeft",
- "ctrl-l": "pane::SplitRight",
- },
+ "ctrl-l": "pane::SplitRight"
+ }
},
{
"context": "RecentProjects || (RecentProjects > Picker > Editor)",
"bindings": {
"ctrl-k": "recent_projects::ToggleActionsMenu",
- "ctrl-shift-a": "workspace::AddFolderToProject",
- },
+ "ctrl-shift-a": "workspace::AddFolderToProject"
+ }
},
{
"context": "TabSwitcher",
@@ -1117,15 +1117,15 @@
"ctrl-shift-tab": "menu::SelectPrevious",
"ctrl-up": "menu::SelectPrevious",
"ctrl-down": "menu::SelectNext",
- "ctrl-backspace": "tab_switcher::CloseSelectedItem",
- },
+ "ctrl-backspace": "tab_switcher::CloseSelectedItem"
+ }
},
{
"context": "StashList || (StashList > Picker > Editor)",
"bindings": {
"ctrl-shift-backspace": "stash_picker::DropStashItem",
- "ctrl-shift-v": "stash_picker::ShowStashItem",
- },
+ "ctrl-shift-v": "stash_picker::ShowStashItem"
+ }
},
{
"context": "Terminal",
@@ -1171,58 +1171,58 @@
"ctrl-alt-r": "terminal::RerunTask",
"alt-t": "terminal::RerunTask",
"ctrl-shift-5": "pane::SplitRight",
- "ctrl->": "agent::AddSelectionToThread",
- },
+ "ctrl->": "agent::AddSelectionToThread"
+ }
},
{
"context": "ZedPredictModal",
"bindings": {
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "ConfigureContextServerModal > Editor",
"bindings": {
"escape": "menu::Cancel",
"enter": "editor::Newline",
- "ctrl-enter": "menu::Confirm",
- },
+ "ctrl-enter": "menu::Confirm"
+ }
},
{
"context": "ContextServerToolsModal",
"use_key_equivalents": true,
"bindings": {
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "OnboardingAiConfigurationModal",
"use_key_equivalents": true,
"bindings": {
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "Diagnostics",
"use_key_equivalents": true,
"bindings": {
- "ctrl-r": "diagnostics::ToggleDiagnosticsRefresh",
- },
+ "ctrl-r": "diagnostics::ToggleDiagnosticsRefresh"
+ }
},
{
"context": "DebugConsole > Editor",
"use_key_equivalents": true,
"bindings": {
"enter": "menu::Confirm",
- "alt-enter": "console::WatchExpression",
- },
+ "alt-enter": "console::WatchExpression"
+ }
},
{
"context": "RunModal",
"bindings": {
"ctrl-tab": "pane::ActivateNextItem",
- "ctrl-shift-tab": "pane::ActivatePreviousItem",
- },
+ "ctrl-shift-tab": "pane::ActivatePreviousItem"
+ }
},
{
"context": "MarkdownPreview",
@@ -1232,8 +1232,8 @@
"up": "markdown::ScrollUp",
"down": "markdown::ScrollDown",
"alt-up": "markdown::ScrollUpByItem",
- "alt-down": "markdown::ScrollDownByItem",
- },
+ "alt-down": "markdown::ScrollDownByItem"
+ }
},
{
"context": "KeymapEditor",
@@ -1249,8 +1249,8 @@
"ctrl-c": "keymap_editor::CopyAction",
"ctrl-shift-c": "keymap_editor::CopyContext",
"ctrl-t": "keymap_editor::ShowMatchingKeybinds",
- "ctrl-e": "zed::OpenKeymapFile",
- },
+ "ctrl-e": "zed::OpenKeymapFile"
+ }
},
{
"context": "KeystrokeInput",
@@ -1258,24 +1258,24 @@
"bindings": {
"enter": "keystroke_input::StartRecording",
"escape escape escape": "keystroke_input::StopRecording",
- "delete": "keystroke_input::ClearKeystrokes",
- },
+ "delete": "keystroke_input::ClearKeystrokes"
+ }
},
{
"context": "KeybindEditorModal",
"use_key_equivalents": true,
"bindings": {
"ctrl-enter": "menu::Confirm",
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "KeybindEditorModal > Editor",
"use_key_equivalents": true,
"bindings": {
"up": "menu::SelectPrevious",
- "down": "menu::SelectNext",
- },
+ "down": "menu::SelectNext"
+ }
},
{
"context": "Onboarding",
@@ -1287,8 +1287,8 @@
"ctrl-0": ["zed::ResetUiFontSize", { "persist": false }],
"ctrl-enter": "onboarding::Finish",
"alt-shift-l": "onboarding::SignIn",
- "alt-shift-a": "onboarding::OpenAccount",
- },
+ "alt-shift-a": "onboarding::OpenAccount"
+ }
},
{
"context": "Welcome",
@@ -1302,15 +1302,15 @@
"ctrl-2": ["welcome::OpenRecentProject", 1],
"ctrl-3": ["welcome::OpenRecentProject", 2],
"ctrl-4": ["welcome::OpenRecentProject", 3],
- "ctrl-5": ["welcome::OpenRecentProject", 4],
- },
+ "ctrl-5": ["welcome::OpenRecentProject", 4]
+ }
},
{
"context": "InvalidBuffer",
"use_key_equivalents": true,
"bindings": {
- "ctrl-shift-enter": "workspace::OpenWithSystem",
- },
+ "ctrl-shift-enter": "workspace::OpenWithSystem"
+ }
},
{
"context": "GitWorktreeSelector || (GitWorktreeSelector > Picker > Editor)",
@@ -51,15 +51,15 @@
"ctrl-cmd-i": "edit_prediction::ToggleMenu",
"ctrl-cmd-l": "lsp_tool::ToggleMenu",
"ctrl-cmd-c": "editor::DisplayCursorNames",
- "ctrl-cmd-s": "workspace::ToggleWorktreeSecurity",
- },
+ "ctrl-cmd-s": "workspace::ToggleWorktreeSecurity"
+ }
},
{
"context": "menu",
"bindings": {
"right": "menu::SelectChild",
- "left": "menu::SelectParent",
- },
+ "left": "menu::SelectParent"
+ }
},
{
"context": "Editor",
@@ -157,8 +157,8 @@
"shift-f9": "editor::EditLogBreakpoint",
"ctrl-f12": "editor::GoToDeclaration",
"alt-ctrl-f12": "editor::GoToDeclarationSplit",
- "ctrl-cmd-e": "editor::ToggleEditPrediction",
- },
+ "ctrl-cmd-e": "editor::ToggleEditPrediction"
+ }
},
{
"context": "Editor && mode == full",
@@ -176,8 +176,8 @@
"cmd->": "agent::AddSelectionToThread",
"cmd-<": "assistant::InsertIntoEditor",
"cmd-alt-e": "editor::SelectEnclosingSymbol",
- "alt-enter": "editor::OpenSelectionsInMultibuffer",
- },
+ "alt-enter": "editor::OpenSelectionsInMultibuffer"
+ }
},
{
"context": "Editor && multibuffer",
@@ -186,23 +186,23 @@
"cmd-up": "editor::MoveToStartOfExcerpt",
"cmd-down": "editor::MoveToStartOfNextExcerpt",
"cmd-shift-up": "editor::SelectToStartOfExcerpt",
- "cmd-shift-down": "editor::SelectToStartOfNextExcerpt",
- },
+ "cmd-shift-down": "editor::SelectToStartOfNextExcerpt"
+ }
},
{
"context": "Editor && mode == full && edit_prediction",
"use_key_equivalents": true,
"bindings": {
"alt-tab": "editor::NextEditPrediction",
- "alt-shift-tab": "editor::PreviousEditPrediction",
- },
+ "alt-shift-tab": "editor::PreviousEditPrediction"
+ }
},
{
"context": "Editor && !edit_prediction",
"use_key_equivalents": true,
"bindings": {
- "alt-tab": "editor::ShowEditPrediction",
- },
+ "alt-tab": "editor::ShowEditPrediction"
+ }
},
{
"context": "Editor && mode == auto_height",
@@ -210,23 +210,23 @@
"bindings": {
"ctrl-enter": "editor::Newline",
"shift-enter": "editor::Newline",
- "ctrl-shift-enter": "editor::NewlineBelow",
- },
+ "ctrl-shift-enter": "editor::NewlineBelow"
+ }
},
{
"context": "Markdown",
"use_key_equivalents": true,
"bindings": {
- "cmd-c": "markdown::Copy",
- },
+ "cmd-c": "markdown::Copy"
+ }
},
{
"context": "Editor && jupyter && !ContextEditor",
"use_key_equivalents": true,
"bindings": {
"ctrl-shift-enter": "repl::Run",
- "ctrl-alt-enter": "repl::RunInPlace",
- },
+ "ctrl-alt-enter": "repl::RunInPlace"
+ }
},
{
"context": "Editor && !agent_diff && !AgentPanel",
@@ -235,8 +235,8 @@
"cmd-alt-z": "git::Restore",
"cmd-alt-y": "git::ToggleStaged",
"cmd-y": "git::StageAndNext",
- "cmd-shift-y": "git::UnstageAndNext",
- },
+ "cmd-shift-y": "git::UnstageAndNext"
+ }
},
{
"context": "AgentDiff",
@@ -246,8 +246,8 @@
"cmd-alt-y": "agent::Keep",
"cmd-alt-z": "agent::Reject",
"shift-alt-y": "agent::KeepAll",
- "shift-alt-z": "agent::RejectAll",
- },
+ "shift-alt-z": "agent::RejectAll"
+ }
},
{
"context": "Editor && editor_agent_diff",
@@ -258,8 +258,8 @@
"cmd-alt-z": "agent::Reject",
"shift-alt-y": "agent::KeepAll",
"shift-alt-z": "agent::RejectAll",
- "shift-ctrl-r": "agent::OpenAgentDiff",
- },
+ "shift-ctrl-r": "agent::OpenAgentDiff"
+ }
},
{
"context": "ContextEditor > Editor",
@@ -277,8 +277,8 @@
"cmd-shift-g": "search::SelectPreviousMatch",
"cmd-k l": "agent::OpenRulesLibrary",
"alt-tab": "agent::CycleFavoriteModels",
- "cmd-shift-v": "agent::PasteRaw",
- },
+ "cmd-shift-v": "agent::PasteRaw"
+ }
},
{
"context": "AgentPanel",
@@ -304,31 +304,31 @@
"cmd-shift-enter": "agent::ContinueThread",
"cmd-y": "agent::AllowOnce",
"cmd-alt-a": "agent::OpenPermissionDropdown",
- "cmd-alt-z": "agent::RejectOnce",
- },
+ "cmd-alt-z": "agent::RejectOnce"
+ }
},
{
"context": "AgentPanel > Markdown",
"use_key_equivalents": true,
"bindings": {
- "cmd-c": "markdown::CopyAsMarkdown",
- },
+ "cmd-c": "markdown::CopyAsMarkdown"
+ }
},
{
"context": "AgentPanel && text_thread",
"use_key_equivalents": true,
"bindings": {
"cmd-n": "agent::NewTextThread",
- "cmd-alt-n": "agent::NewExternalAgentThread",
- },
+ "cmd-alt-n": "agent::NewExternalAgentThread"
+ }
},
{
"context": "AgentPanel && acp_thread",
"use_key_equivalents": true,
"bindings": {
"cmd-n": "agent::NewExternalAgentThread",
- "cmd-alt-t": "agent::NewThread",
- },
+ "cmd-alt-t": "agent::NewThread"
+ }
},
{
"context": "AgentFeedbackMessageEditor > Editor",
@@ -336,26 +336,26 @@
"bindings": {
"escape": "menu::Cancel",
"enter": "menu::Confirm",
- "alt-enter": "editor::Newline",
- },
+ "alt-enter": "editor::Newline"
+ }
},
{
"context": "AgentConfiguration",
"bindings": {
- "ctrl--": "pane::GoBack",
- },
+ "ctrl--": "pane::GoBack"
+ }
},
{
"context": "AcpThread > ModeSelector",
"bindings": {
- "cmd-enter": "menu::Confirm",
- },
+ "cmd-enter": "menu::Confirm"
+ }
},
{
"context": "AcpThread",
"bindings": {
- "ctrl--": "pane::GoBack",
- },
+ "ctrl--": "pane::GoBack"
+ }
},
{
"context": "AcpThread > Editor",
@@ -380,35 +380,35 @@
"cmd-alt-k": "agent::ToggleThinkingMode",
"cmd-alt-'": "agent::ToggleThinkingEffortMenu",
"ctrl-'": "agent::CycleThinkingEffort",
- "cmd-alt-.": "agent::ToggleFastMode",
- },
+ "cmd-alt-.": "agent::ToggleFastMode"
+ }
},
{
"context": "AcpThread > Editor && !use_modifier_to_send",
"use_key_equivalents": true,
"bindings": {
- "enter": "agent::Chat",
- },
+ "enter": "agent::Chat"
+ }
},
{
"context": "AcpThread > Editor && use_modifier_to_send",
"use_key_equivalents": true,
"bindings": {
"cmd-enter": "agent::Chat",
- "enter": "editor::Newline",
- },
+ "enter": "editor::Newline"
+ }
},
{
"context": "ThreadHistory",
"bindings": {
- "ctrl--": "pane::GoBack",
- },
+ "ctrl--": "pane::GoBack"
+ }
},
{
"context": "ThreadHistory > Editor",
"bindings": {
- "shift-backspace": "agent::RemoveSelectedThread",
- },
+ "shift-backspace": "agent::RemoveSelectedThread"
+ }
},
{
"context": "RulesLibrary",
@@ -416,8 +416,8 @@
"bindings": {
"cmd-n": "rules_library::NewRule",
"cmd-shift-s": "rules_library::ToggleDefaultRule",
- "cmd-w": "workspace::CloseWindow",
- },
+ "cmd-w": "workspace::CloseWindow"
+ }
},
{
"context": "BufferSearchBar",
@@ -432,31 +432,31 @@
"cmd-f": "search::FocusSearch",
"cmd-alt-f": "search::ToggleReplace",
"cmd-alt-l": "search::ToggleSelection",
- "cmd-shift-o": "outline::Toggle",
- },
+ "cmd-shift-o": "outline::Toggle"
+ }
},
{
"context": "BufferSearchBar && in_replace > Editor",
"use_key_equivalents": true,
"bindings": {
"enter": "search::ReplaceNext",
- "cmd-enter": "search::ReplaceAll",
- },
+ "cmd-enter": "search::ReplaceAll"
+ }
},
{
"context": "BufferSearchBar && !in_replace > Editor",
"use_key_equivalents": true,
"bindings": {
"up": "search::PreviousHistoryQuery",
- "down": "search::NextHistoryQuery",
- },
+ "down": "search::NextHistoryQuery"
+ }
},
{
"context": "BufferSearchBar || ProjectSearchBar",
"use_key_equivalents": true,
"bindings": {
- "ctrl-enter": "editor::Newline",
- },
+ "ctrl-enter": "editor::Newline"
+ }
},
{
"context": "ProjectSearchBar",
@@ -468,24 +468,24 @@
"cmd-shift-f": "search::FocusSearch",
"cmd-shift-h": "search::ToggleReplace",
"alt-cmd-g": "search::ToggleRegex",
- "alt-cmd-x": "search::ToggleRegex",
- },
+ "alt-cmd-x": "search::ToggleRegex"
+ }
},
{
"context": "ProjectSearchBar > Editor",
"use_key_equivalents": true,
"bindings": {
"up": "search::PreviousHistoryQuery",
- "down": "search::NextHistoryQuery",
- },
+ "down": "search::NextHistoryQuery"
+ }
},
{
"context": "ProjectSearchBar && in_replace > Editor",
"use_key_equivalents": true,
"bindings": {
"enter": "search::ReplaceNext",
- "cmd-enter": "search::ReplaceAll",
- },
+ "cmd-enter": "search::ReplaceAll"
+ }
},
{
"context": "ProjectSearchView",
@@ -496,8 +496,8 @@
"cmd-shift-enter": "project_search::ToggleAllSearchResults",
"cmd-shift-h": "search::ToggleReplace",
"alt-cmd-g": "search::ToggleRegex",
- "alt-cmd-x": "search::ToggleRegex",
- },
+ "alt-cmd-x": "search::ToggleRegex"
+ }
},
{
"context": "Pane",
@@ -527,8 +527,8 @@
"alt-cmd-w": "search::ToggleWholeWord",
"alt-cmd-f": "project_search::ToggleFilters",
"alt-cmd-x": "search::ToggleRegex",
- "cmd-k shift-enter": "pane::TogglePinTab",
- },
+ "cmd-k shift-enter": "pane::TogglePinTab"
+ }
},
// Bindings from VS Code
{
@@ -598,24 +598,24 @@
"cmd-.": "editor::ToggleCodeActions",
"cmd-k r": "editor::RevealInFileManager",
"cmd-k p": "editor::CopyPath",
- "cmd-\\": "pane::SplitRight",
- },
+ "cmd-\\": "pane::SplitRight"
+ }
},
{
"context": "Editor && extension == md",
"use_key_equivalents": true,
"bindings": {
"cmd-k v": "markdown::OpenPreviewToTheSide",
- "cmd-shift-v": "markdown::OpenPreview",
- },
+ "cmd-shift-v": "markdown::OpenPreview"
+ }
},
{
"context": "Editor && extension == svg",
"use_key_equivalents": true,
"bindings": {
"cmd-k v": "svg::OpenPreviewToTheSide",
- "cmd-shift-v": "svg::OpenPreview",
- },
+ "cmd-shift-v": "svg::OpenPreview"
+ }
},
{
"context": "Editor && mode == full",
@@ -624,8 +624,8 @@
"cmd-shift-o": "outline::Toggle",
"ctrl-g": "go_to_line::Toggle",
"cmd-shift-backspace": "editor::GoToPreviousChange",
- "cmd-shift-alt-backspace": "editor::GoToNextChange",
- },
+ "cmd-shift-alt-backspace": "editor::GoToNextChange"
+ }
},
{
"context": "Pane",
@@ -643,8 +643,8 @@
"ctrl-0": "pane::ActivateLastItem",
"ctrl--": "pane::GoBack",
"ctrl-_": "pane::GoForward",
- "cmd-shift-f": "pane::DeploySearch",
- },
+ "cmd-shift-f": "pane::DeploySearch"
+ }
},
{
"context": "Workspace",
@@ -676,7 +676,7 @@
"cmd-alt-b": "workspace::ToggleRightDock",
"cmd-r": "workspace::ToggleRightDock",
"cmd-j": "workspace::ToggleBottomDock",
- "cmd-alt-j": "multi_workspace::ToggleWorkspaceSidebar",
+ "cmd-alt-j": "agent::ToggleThreadsSidebar",
"cmd-alt-;": "multi_workspace::FocusWorkspaceSidebar",
"alt-cmd-y": "workspace::ToggleAllDocks",
// For 0px parameter, uses UI font size value.
@@ -703,7 +703,7 @@
"cmd-shift-b": "outline_panel::ToggleFocus",
"ctrl-shift-g": "git_panel::ToggleFocus",
"cmd-shift-d": "debug_panel::ToggleFocus",
- "cmd-?": "agent::ToggleFocus",
+ "cmd-?": "agent::ToggleAgentDrawer",
"cmd-alt-s": "workspace::SaveAll",
"cmd-k n": "encoding_selector::Toggle",
"cmd-k m": "language_selector::Toggle",
@@ -719,8 +719,8 @@
"cmd-k shift-down": "workspace::SwapPaneDown",
"cmd-shift-x": "zed::Extensions",
"f5": "debugger::Rerun",
- "cmd-w": "workspace::CloseActiveDock",
- },
+ "cmd-w": "workspace::CloseActiveDock"
+ }
},
{
"context": "Workspace && !Terminal",
@@ -731,12 +731,12 @@
// All task parameters are captured and unchanged between reruns by default.
// Use the `"reevaluate_context"` parameter to control this.
"cmd-alt-r": ["task::Rerun", { "reevaluate_context": false }],
- "ctrl-alt-shift-r": ["task::Spawn", { "reveal_target": "center" }],
+ "ctrl-alt-shift-r": ["task::Spawn", { "reveal_target": "center" }]
// also possible to spawn tasks by name:
// "foo-bar": ["task::Spawn", { "task_name": "MyTask", "reveal_target": "dock" }]
// or by tag:
// "foo-bar": ["task::Spawn", { "task_tag": "MyTag" }],
- },
+ }
},
{
"context": "WorkspaceSidebar",
@@ -745,23 +745,23 @@
"cmd-n": "multi_workspace::NewWorkspaceInWindow",
"left": "agents_sidebar::CollapseSelectedEntry",
"right": "agents_sidebar::ExpandSelectedEntry",
- "enter": "menu::Confirm",
- },
+ "enter": "menu::Confirm"
+ }
},
{
"context": "Workspace && debugger_running",
"use_key_equivalents": true,
"bindings": {
"f5": "zed::NoAction",
- "f11": "debugger::StepInto",
- },
+ "f11": "debugger::StepInto"
+ }
},
{
"context": "Workspace && debugger_stopped",
"use_key_equivalents": true,
"bindings": {
- "f5": "debugger::Continue",
- },
+ "f5": "debugger::Continue"
+ }
},
// Bindings from Sublime Text
{
@@ -782,8 +782,8 @@
"ctrl-alt-shift-left": "editor::SelectToPreviousSubwordStart",
"ctrl-alt-shift-b": "editor::SelectToPreviousSubwordStart",
"ctrl-alt-shift-right": "editor::SelectToNextSubwordEnd",
- "ctrl-alt-shift-f": "editor::SelectToNextSubwordEnd",
- },
+ "ctrl-alt-shift-f": "editor::SelectToNextSubwordEnd"
+ }
},
// Bindings from Atom
{
@@ -793,16 +793,16 @@
"cmd-k up": "pane::SplitUp",
"cmd-k down": "pane::SplitDown",
"cmd-k left": "pane::SplitLeft",
- "cmd-k right": "pane::SplitRight",
- },
+ "cmd-k right": "pane::SplitRight"
+ }
},
// Bindings that should be unified with bindings for more general actions
{
"context": "Editor && renaming",
"use_key_equivalents": true,
"bindings": {
- "enter": "editor::ConfirmRename",
- },
+ "enter": "editor::ConfirmRename"
+ }
},
{
"context": "Editor && showing_completions",
@@ -810,22 +810,22 @@
"bindings": {
"enter": "editor::ConfirmCompletion",
"shift-enter": "editor::ConfirmCompletionReplace",
- "tab": "editor::ComposeCompletion",
- },
+ "tab": "editor::ComposeCompletion"
+ }
},
{
"context": "Editor && in_snippet && has_next_tabstop && !showing_completions",
"use_key_equivalents": true,
"bindings": {
- "tab": "editor::NextSnippetTabstop",
- },
+ "tab": "editor::NextSnippetTabstop"
+ }
},
{
"context": "Editor && in_snippet && has_previous_tabstop && !showing_completions",
"use_key_equivalents": true,
"bindings": {
- "shift-tab": "editor::PreviousSnippetTabstop",
- },
+ "shift-tab": "editor::PreviousSnippetTabstop"
+ }
},
{
"context": "Editor && edit_prediction",
@@ -833,8 +833,8 @@
"alt-tab": "editor::AcceptEditPrediction",
"tab": "editor::AcceptEditPrediction",
"ctrl-cmd-right": "editor::AcceptNextWordEditPrediction",
- "ctrl-cmd-down": "editor::AcceptNextLineEditPrediction",
- },
+ "ctrl-cmd-down": "editor::AcceptNextLineEditPrediction"
+ }
},
{
"context": "Editor && edit_prediction_conflict",
@@ -842,15 +842,15 @@
"bindings": {
"alt-tab": "editor::AcceptEditPrediction",
"ctrl-cmd-right": "editor::AcceptNextWordEditPrediction",
- "ctrl-cmd-down": "editor::AcceptNextLineEditPrediction",
- },
+ "ctrl-cmd-down": "editor::AcceptNextLineEditPrediction"
+ }
},
{
"context": "Editor && showing_code_actions",
"use_key_equivalents": true,
"bindings": {
- "enter": "editor::ConfirmCodeAction",
- },
+ "enter": "editor::ConfirmCodeAction"
+ }
},
{
"context": "Editor && (showing_code_actions || showing_completions)",
@@ -861,15 +861,15 @@
"down": "editor::ContextMenuNext",
"ctrl-n": "editor::ContextMenuNext",
"pageup": "editor::ContextMenuFirst",
- "pagedown": "editor::ContextMenuLast",
- },
+ "pagedown": "editor::ContextMenuLast"
+ }
},
{
"context": "Editor && showing_signature_help && !showing_completions",
"bindings": {
"up": "editor::SignatureHelpPrevious",
- "down": "editor::SignatureHelpNext",
- },
+ "down": "editor::SignatureHelpNext"
+ }
},
// Custom bindings
{
@@ -879,8 +879,8 @@
// TODO: Move this to a dock open action
"cmd-shift-c": "collab_panel::ToggleFocus",
// Only available in debug builds: opens an element inspector for development.
- "cmd-alt-i": "dev::ToggleInspector",
- },
+ "cmd-alt-i": "dev::ToggleInspector"
+ }
},
{
"context": "!ContextEditor && !AcpThread > Editor && mode == full",
@@ -893,8 +893,8 @@
"cmd-f8": "editor::GoToHunk",
"cmd-shift-f8": "editor::GoToPreviousHunk",
"ctrl-enter": "assistant::InlineAssist",
- "ctrl-:": "editor::ToggleInlayHints",
- },
+ "ctrl-:": "editor::ToggleInlayHints"
+ }
},
{
"context": "InlineAssistant > Editor",
@@ -905,8 +905,8 @@
"ctrl-[": "agent::CyclePreviousInlineAssist",
"ctrl-]": "agent::CycleNextInlineAssist",
"cmd-shift-enter": "inline_assistant::ThumbsUpResult",
- "cmd-shift-backspace": "inline_assistant::ThumbsDownResult",
- },
+ "cmd-shift-backspace": "inline_assistant::ThumbsDownResult"
+ }
},
{
"context": "Prompt",
@@ -915,15 +915,15 @@
"left": "menu::SelectPrevious",
"right": "menu::SelectNext",
"h": "menu::SelectPrevious",
- "l": "menu::SelectNext",
- },
+ "l": "menu::SelectNext"
+ }
},
{
"context": "ProjectSearchBar && !in_replace",
"use_key_equivalents": true,
"bindings": {
- "cmd-enter": "project_search::SearchInNew",
- },
+ "cmd-enter": "project_search::SearchInNew"
+ }
},
{
"context": "OutlinePanel && not_editing",
@@ -939,8 +939,8 @@
"shift-down": "menu::SelectNext",
"shift-up": "menu::SelectPrevious",
"alt-enter": "editor::OpenExcerpts",
- "cmd-alt-enter": "editor::OpenExcerptsSplit",
- },
+ "cmd-alt-enter": "editor::OpenExcerptsSplit"
+ }
},
{
"context": "ProjectPanel",
@@ -970,15 +970,15 @@
"cmd-alt-shift-f": "project_panel::NewSearchInDirectory",
"shift-down": "menu::SelectNext",
"shift-up": "menu::SelectPrevious",
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "ProjectPanel && not_editing",
"use_key_equivalents": true,
"bindings": {
- "space": "project_panel::Open",
- },
+ "space": "project_panel::Open"
+ }
},
{
"context": "VariableList",
@@ -991,8 +991,8 @@
"cmd-alt-c": "variable_list::CopyVariableName",
"delete": "variable_list::RemoveWatch",
"backspace": "variable_list::RemoveWatch",
- "alt-enter": "variable_list::AddWatch",
- },
+ "alt-enter": "variable_list::AddWatch"
+ }
},
{
"context": "GitPanel && ChangesList",
@@ -1017,15 +1017,15 @@
"backspace": ["git::RestoreFile", { "skip_prompt": false }],
"delete": ["git::RestoreFile", { "skip_prompt": false }],
"cmd-backspace": ["git::RestoreFile", { "skip_prompt": true }],
- "cmd-delete": ["git::RestoreFile", { "skip_prompt": true }],
- },
+ "cmd-delete": ["git::RestoreFile", { "skip_prompt": true }]
+ }
},
{
"context": "GitPanel && CommitEditor",
"use_key_equivalents": true,
"bindings": {
- "escape": "git::Cancel",
- },
+ "escape": "git::Cancel"
+ }
},
{
"context": "GitDiff > Editor",
@@ -1035,8 +1035,8 @@
"cmd-shift-enter": "git::Amend",
"cmd-ctrl-y": "git::StageAll",
"cmd-ctrl-shift-y": "git::UnstageAll",
- "cmd-alt-z": "git::RestoreAndNext",
- },
+ "cmd-alt-z": "git::RestoreAndNext"
+ }
},
{
"context": "CommitEditor > Editor",
@@ -1049,8 +1049,8 @@
"shift-tab": "git_panel::FocusChanges",
"alt-up": "git_panel::FocusChanges",
"shift-escape": "git::ExpandCommitEditor",
- "alt-tab": "git::GenerateCommitMessage",
- },
+ "alt-tab": "git::GenerateCommitMessage"
+ }
},
{
"context": "GitPanel",
@@ -1067,8 +1067,8 @@
"cmd-ctrl-y": "git::StageAll",
"cmd-ctrl-shift-y": "git::UnstageAll",
"cmd-enter": "git::Commit",
- "cmd-shift-enter": "git::Amend",
- },
+ "cmd-shift-enter": "git::Amend"
+ }
},
{
"context": "GitCommit > Editor",
@@ -1078,16 +1078,16 @@
"escape": "menu::Cancel",
"cmd-enter": "git::Commit",
"cmd-shift-enter": "git::Amend",
- "alt-tab": "git::GenerateCommitMessage",
- },
+ "alt-tab": "git::GenerateCommitMessage"
+ }
},
{
"context": "DebugPanel",
"bindings": {
"cmd-t": "debugger::ToggleThreadPicker",
"cmd-i": "debugger::ToggleSessionPicker",
- "shift-alt-escape": "debugger::ToggleExpandItem",
- },
+ "shift-alt-escape": "debugger::ToggleExpandItem"
+ }
},
{
"context": "BreakpointList",
@@ -1095,16 +1095,16 @@
"space": "debugger::ToggleEnableBreakpoint",
"backspace": "debugger::UnsetBreakpoint",
"left": "debugger::PreviousBreakpointProperty",
- "right": "debugger::NextBreakpointProperty",
- },
+ "right": "debugger::NextBreakpointProperty"
+ }
},
{
"context": "CollabPanel && not_editing",
"use_key_equivalents": true,
"bindings": {
"ctrl-backspace": "collab_panel::Remove",
- "space": "menu::Confirm",
- },
+ "space": "menu::Confirm"
+ }
},
{
"context": "CollabPanel",
@@ -1112,22 +1112,22 @@
"bindings": {
"alt-up": "collab_panel::MoveChannelUp",
"alt-down": "collab_panel::MoveChannelDown",
- "alt-enter": "collab_panel::OpenSelectedChannelNotes",
- },
+ "alt-enter": "collab_panel::OpenSelectedChannelNotes"
+ }
},
{
"context": "(CollabPanel && editing) > Editor",
"use_key_equivalents": true,
"bindings": {
- "space": "collab_panel::InsertSpace",
- },
+ "space": "collab_panel::InsertSpace"
+ }
},
{
"context": "ChannelModal",
"use_key_equivalents": true,
"bindings": {
- "tab": "channel_modal::ToggleMode",
- },
+ "tab": "channel_modal::ToggleMode"
+ }
},
{
"context": "Picker > Editor",
@@ -1138,30 +1138,30 @@
"down": "menu::SelectNext",
"tab": "picker::ConfirmCompletion",
"alt-enter": ["picker::ConfirmInput", { "secondary": false }],
- "cmd-alt-enter": ["picker::ConfirmInput", { "secondary": true }],
- },
+ "cmd-alt-enter": ["picker::ConfirmInput", { "secondary": true }]
+ }
},
{
"context": "ChannelModal > Picker > Editor",
"use_key_equivalents": true,
"bindings": {
- "tab": "channel_modal::ToggleMode",
- },
+ "tab": "channel_modal::ToggleMode"
+ }
},
{
"context": "ToolchainSelector",
"use_key_equivalents": true,
"bindings": {
- "cmd-shift-a": "toolchain::AddToolchain",
- },
+ "cmd-shift-a": "toolchain::AddToolchain"
+ }
},
{
"context": "FileFinder || (FileFinder > Picker > Editor)",
"use_key_equivalents": true,
"bindings": {
"cmd-shift-a": "file_finder::ToggleSplitMenu",
- "cmd-shift-i": "file_finder::ToggleFilterMenu",
- },
+ "cmd-shift-i": "file_finder::ToggleFilterMenu"
+ }
},
{
"context": "FileFinder || (FileFinder > Picker > Editor) || (FileFinder > Picker > menu)",
@@ -1171,16 +1171,16 @@
"cmd-j": "pane::SplitDown",
"cmd-k": "pane::SplitUp",
"cmd-h": "pane::SplitLeft",
- "cmd-l": "pane::SplitRight",
- },
+ "cmd-l": "pane::SplitRight"
+ }
},
{
"context": "RecentProjects || (RecentProjects > Picker > Editor)",
"use_key_equivalents": true,
"bindings": {
"cmd-k": "recent_projects::ToggleActionsMenu",
- "cmd-shift-a": "workspace::AddFolderToProject",
- },
+ "cmd-shift-a": "workspace::AddFolderToProject"
+ }
},
{
"context": "TabSwitcher",
@@ -1189,16 +1189,16 @@
"ctrl-shift-tab": "menu::SelectPrevious",
"ctrl-up": "menu::SelectPrevious",
"ctrl-down": "menu::SelectNext",
- "ctrl-backspace": "tab_switcher::CloseSelectedItem",
- },
+ "ctrl-backspace": "tab_switcher::CloseSelectedItem"
+ }
},
{
"context": "StashList || (StashList > Picker > Editor)",
"use_key_equivalents": true,
"bindings": {
"ctrl-shift-backspace": "stash_picker::DropStashItem",
- "ctrl-shift-v": "stash_picker::ShowStashItem",
- },
+ "ctrl-shift-v": "stash_picker::ShowStashItem"
+ }
},
{
"context": "Terminal",
@@ -1254,8 +1254,8 @@
"ctrl-alt-right": "pane::SplitRight",
"cmd-d": "pane::SplitRight",
"cmd-alt-r": "terminal::RerunTask",
- "cmd->": "agent::AddSelectionToThread",
- },
+ "cmd->": "agent::AddSelectionToThread"
+ }
},
{
"context": "RatePredictionsModal",
@@ -1265,8 +1265,8 @@
"cmd-shift-backspace": "zeta::ThumbsDownActivePrediction",
"shift-down": "zeta::NextEdit",
"shift-up": "zeta::PreviousEdit",
- "right": "zeta::PreviewPrediction",
- },
+ "right": "zeta::PreviewPrediction"
+ }
},
{
"context": "RatePredictionsModal > Editor",
@@ -1274,15 +1274,15 @@
"bindings": {
"escape": "zeta::FocusPredictions",
"cmd-shift-enter": "zeta::ThumbsUpActivePrediction",
- "cmd-shift-backspace": "zeta::ThumbsDownActivePrediction",
- },
+ "cmd-shift-backspace": "zeta::ThumbsDownActivePrediction"
+ }
},
{
"context": "ZedPredictModal",
"use_key_equivalents": true,
"bindings": {
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "ConfigureContextServerModal > Editor",
@@ -1290,45 +1290,45 @@
"bindings": {
"escape": "menu::Cancel",
"enter": "editor::Newline",
- "cmd-enter": "menu::Confirm",
- },
+ "cmd-enter": "menu::Confirm"
+ }
},
{
"context": "ContextServerToolsModal",
"use_key_equivalents": true,
"bindings": {
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "OnboardingAiConfigurationModal",
"use_key_equivalents": true,
"bindings": {
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "Diagnostics",
"use_key_equivalents": true,
"bindings": {
- "ctrl-r": "diagnostics::ToggleDiagnosticsRefresh",
- },
+ "ctrl-r": "diagnostics::ToggleDiagnosticsRefresh"
+ }
},
{
"context": "DebugConsole > Editor",
"use_key_equivalents": true,
"bindings": {
"enter": "menu::Confirm",
- "alt-enter": "console::WatchExpression",
- },
+ "alt-enter": "console::WatchExpression"
+ }
},
{
"context": "RunModal",
"use_key_equivalents": true,
"bindings": {
"ctrl-tab": "pane::ActivateNextItem",
- "ctrl-shift-tab": "pane::ActivatePreviousItem",
- },
+ "ctrl-shift-tab": "pane::ActivatePreviousItem"
+ }
},
{
"context": "MarkdownPreview",
@@ -43,23 +43,23 @@
"ctrl-shift-i": "edit_prediction::ToggleMenu",
"shift-alt-l": "lsp_tool::ToggleMenu",
"ctrl-shift-alt-c": "editor::DisplayCursorNames",
- "ctrl-shift-alt-s": "workspace::ToggleWorktreeSecurity",
- },
+ "ctrl-shift-alt-s": "workspace::ToggleWorktreeSecurity"
+ }
},
{
"context": "Picker || menu",
"use_key_equivalents": true,
"bindings": {
"up": "menu::SelectPrevious",
- "down": "menu::SelectNext",
- },
+ "down": "menu::SelectNext"
+ }
},
{
"context": "menu",
"bindings": {
"right": "menu::SelectChild",
- "left": "menu::SelectParent",
- },
+ "left": "menu::SelectParent"
+ }
},
{
"context": "Editor",
@@ -128,8 +128,8 @@
"shift-f10": "editor::OpenContextMenu",
"ctrl-alt-e": "editor::ToggleEditPrediction",
"f9": "editor::ToggleBreakpoint",
- "shift-f9": "editor::EditLogBreakpoint",
- },
+ "shift-f9": "editor::EditLogBreakpoint"
+ }
},
{
"context": "Editor && mode == full",
@@ -148,23 +148,23 @@
"shift-alt-e": "editor::SelectEnclosingSymbol",
"ctrl-shift-backspace": "editor::GoToPreviousChange",
"ctrl-shift-alt-backspace": "editor::GoToNextChange",
- "alt-enter": "editor::OpenSelectionsInMultibuffer",
- },
+ "alt-enter": "editor::OpenSelectionsInMultibuffer"
+ }
},
{
"context": "Editor && mode == full && edit_prediction",
"use_key_equivalents": true,
"bindings": {
"alt-]": "editor::NextEditPrediction",
- "alt-[": "editor::PreviousEditPrediction",
- },
+ "alt-[": "editor::PreviousEditPrediction"
+ }
},
{
"context": "Editor && !edit_prediction",
"use_key_equivalents": true,
"bindings": {
- "alt-\\": "editor::ShowEditPrediction",
- },
+ "alt-\\": "editor::ShowEditPrediction"
+ }
},
{
"context": "Editor && mode == auto_height",
@@ -172,23 +172,23 @@
"bindings": {
"ctrl-enter": "editor::Newline",
"shift-enter": "editor::Newline",
- "ctrl-shift-enter": "editor::NewlineBelow",
- },
+ "ctrl-shift-enter": "editor::NewlineBelow"
+ }
},
{
"context": "Markdown",
"use_key_equivalents": true,
"bindings": {
- "ctrl-c": "markdown::Copy",
- },
+ "ctrl-c": "markdown::Copy"
+ }
},
{
"context": "Editor && jupyter && !ContextEditor",
"use_key_equivalents": true,
"bindings": {
"ctrl-shift-enter": "repl::Run",
- "ctrl-alt-enter": "repl::RunInPlace",
- },
+ "ctrl-alt-enter": "repl::RunInPlace"
+ }
},
{
"context": "Editor && !agent_diff",
@@ -196,8 +196,8 @@
"bindings": {
"ctrl-k ctrl-r": "git::Restore",
"alt-y": "git::StageAndNext",
- "shift-alt-y": "git::UnstageAndNext",
- },
+ "shift-alt-y": "git::UnstageAndNext"
+ }
},
{
"context": "Editor && editor_agent_diff",
@@ -208,8 +208,8 @@
"ctrl-alt-z": "agent::Reject",
"shift-alt-y": "agent::KeepAll",
"shift-alt-z": "agent::RejectAll",
- "ctrl-shift-r": "agent::OpenAgentDiff",
- },
+ "ctrl-shift-r": "agent::OpenAgentDiff"
+ }
},
{
"context": "AgentDiff",
@@ -219,8 +219,8 @@
"ctrl-alt-y": "agent::Keep",
"ctrl-alt-z": "agent::Reject",
"shift-alt-y": "agent::KeepAll",
- "shift-alt-z": "agent::RejectAll",
- },
+ "shift-alt-z": "agent::RejectAll"
+ }
},
{
"context": "ContextEditor > Editor",
@@ -237,8 +237,8 @@
"ctrl-g": "search::SelectNextMatch",
"ctrl-shift-g": "search::SelectPreviousMatch",
"ctrl-k l": "agent::OpenRulesLibrary",
- "ctrl-shift-v": "agent::PasteRaw",
- },
+ "ctrl-shift-v": "agent::PasteRaw"
+ }
},
{
"context": "AgentPanel",
@@ -266,31 +266,31 @@
"ctrl-shift-enter": "agent::ContinueThread",
"shift-alt-a": "agent::AllowOnce",
"ctrl-alt-a": "agent::OpenPermissionDropdown",
- "shift-alt-z": "agent::RejectOnce",
- },
+ "shift-alt-z": "agent::RejectOnce"
+ }
},
{
"context": "AgentPanel > Markdown",
"use_key_equivalents": true,
"bindings": {
- "ctrl-c": "markdown::CopyAsMarkdown",
- },
+ "ctrl-c": "markdown::CopyAsMarkdown"
+ }
},
{
"context": "AgentPanel && text_thread",
"use_key_equivalents": true,
"bindings": {
"ctrl-n": "agent::NewTextThread",
- "ctrl-alt-t": "agent::NewThread",
- },
+ "ctrl-alt-t": "agent::NewThread"
+ }
},
{
"context": "AgentPanel && acp_thread",
"use_key_equivalents": true,
"bindings": {
"ctrl-n": "agent::NewExternalAgentThread",
- "ctrl-alt-t": "agent::NewThread",
- },
+ "ctrl-alt-t": "agent::NewThread"
+ }
},
{
"context": "AgentFeedbackMessageEditor > Editor",
@@ -298,20 +298,20 @@
"bindings": {
"escape": "menu::Cancel",
"enter": "menu::Confirm",
- "alt-enter": "editor::Newline",
- },
+ "alt-enter": "editor::Newline"
+ }
},
{
"context": "AcpThread > ModeSelector",
"bindings": {
- "ctrl-enter": "menu::Confirm",
- },
+ "ctrl-enter": "menu::Confirm"
+ }
},
{
"context": "AcpThread",
"bindings": {
- "ctrl--": "pane::GoBack",
- },
+ "ctrl--": "pane::GoBack"
+ }
},
{
"context": "AcpThread > Editor",
@@ -338,30 +338,30 @@
"ctrl-alt-k": "agent::ToggleThinkingMode",
"ctrl-alt-'": "agent::ToggleThinkingEffortMenu",
"ctrl-'": "agent::CycleThinkingEffort",
- "ctrl-alt-.": "agent::ToggleFastMode",
- },
+ "ctrl-alt-.": "agent::ToggleFastMode"
+ }
},
{
"context": "AcpThread > Editor && !use_modifier_to_send",
"use_key_equivalents": true,
"bindings": {
- "enter": "agent::Chat",
- },
+ "enter": "agent::Chat"
+ }
},
{
"context": "AcpThread > Editor && use_modifier_to_send",
"use_key_equivalents": true,
"bindings": {
"ctrl-enter": "agent::Chat",
- "enter": "editor::Newline",
- },
+ "enter": "editor::Newline"
+ }
},
{
"context": "ThreadHistory",
"use_key_equivalents": true,
"bindings": {
- "backspace": "agent::RemoveSelectedThread",
- },
+ "backspace": "agent::RemoveSelectedThread"
+ }
},
{
"context": "RulesLibrary",
@@ -369,8 +369,8 @@
"bindings": {
"ctrl-n": "rules_library::NewRule",
"ctrl-shift-s": "rules_library::ToggleDefaultRule",
- "ctrl-w": "workspace::CloseWindow",
- },
+ "ctrl-w": "workspace::CloseWindow"
+ }
},
{
"context": "BufferSearchBar",
@@ -384,24 +384,24 @@
"alt-enter": "search::SelectAllMatches",
"ctrl-f": "search::FocusSearch",
"ctrl-h": "search::ToggleReplace",
- "ctrl-l": "search::ToggleSelection",
- },
+ "ctrl-l": "search::ToggleSelection"
+ }
},
{
"context": "BufferSearchBar && in_replace > Editor",
"use_key_equivalents": true,
"bindings": {
"enter": "search::ReplaceNext",
- "ctrl-enter": "search::ReplaceAll",
- },
+ "ctrl-enter": "search::ReplaceAll"
+ }
},
{
"context": "BufferSearchBar && !in_replace > Editor",
"use_key_equivalents": true,
"bindings": {
"up": "search::PreviousHistoryQuery",
- "down": "search::NextHistoryQuery",
- },
+ "down": "search::NextHistoryQuery"
+ }
},
{
"context": "ProjectSearchBar",
@@ -410,24 +410,24 @@
"escape": "project_search::ToggleFocus",
"ctrl-shift-f": "search::FocusSearch",
"ctrl-shift-h": "search::ToggleReplace",
- "alt-r": "search::ToggleRegex", // vscode
- },
+ "alt-r": "search::ToggleRegex" // vscode
+ }
},
{
"context": "ProjectSearchBar > Editor",
"use_key_equivalents": true,
"bindings": {
"up": "search::PreviousHistoryQuery",
- "down": "search::NextHistoryQuery",
- },
+ "down": "search::NextHistoryQuery"
+ }
},
{
"context": "ProjectSearchBar && in_replace > Editor",
"use_key_equivalents": true,
"bindings": {
"enter": "search::ReplaceNext",
- "ctrl-alt-enter": "search::ReplaceAll",
- },
+ "ctrl-alt-enter": "search::ReplaceAll"
+ }
},
{
"context": "ProjectSearchView",
@@ -435,8 +435,8 @@
"bindings": {
"escape": "project_search::ToggleFocus",
"ctrl-shift-h": "search::ToggleReplace",
- "alt-r": "search::ToggleRegex", // vscode
- },
+ "alt-r": "search::ToggleRegex" // vscode
+ }
},
{
"context": "Pane",
@@ -483,8 +483,8 @@
"ctrl-shift-enter": "project_search::ToggleAllSearchResults",
"alt-r": "search::ToggleRegex",
// "ctrl-shift-alt-x": "search::ToggleRegex",
- "ctrl-k shift-enter": "pane::TogglePinTab",
- },
+ "ctrl-k shift-enter": "pane::TogglePinTab"
+ }
},
// Bindings from VS Code
{
@@ -544,32 +544,32 @@
"ctrl-k p": "editor::CopyPath",
"ctrl-\\": "pane::SplitRight",
"alt-.": "editor::GoToHunk",
- "alt-,": "editor::GoToPreviousHunk",
- },
+ "alt-,": "editor::GoToPreviousHunk"
+ }
},
{
"context": "Editor && extension == md",
"use_key_equivalents": true,
"bindings": {
"ctrl-k v": "markdown::OpenPreviewToTheSide",
- "ctrl-shift-v": "markdown::OpenPreview",
- },
+ "ctrl-shift-v": "markdown::OpenPreview"
+ }
},
{
"context": "Editor && extension == svg",
"use_key_equivalents": true,
"bindings": {
"ctrl-k v": "svg::OpenPreviewToTheSide",
- "ctrl-shift-v": "svg::OpenPreview",
- },
+ "ctrl-shift-v": "svg::OpenPreview"
+ }
},
{
"context": "Editor && mode == full",
"use_key_equivalents": true,
"bindings": {
"ctrl-shift-o": "outline::Toggle",
- "ctrl-g": "go_to_line::Toggle",
- },
+ "ctrl-g": "go_to_line::Toggle"
+ }
},
{
"context": "Workspace",
@@ -603,7 +603,7 @@
"ctrl-alt-b": "workspace::ToggleRightDock",
"ctrl-b": "workspace::ToggleLeftDock",
"ctrl-j": "workspace::ToggleBottomDock",
- "ctrl-alt-j": "multi_workspace::ToggleWorkspaceSidebar",
+ "ctrl-alt-j": "agent::ToggleThreadsSidebar",
"ctrl-alt-;": "multi_workspace::FocusWorkspaceSidebar",
"ctrl-shift-y": "workspace::ToggleAllDocks",
"alt-r": "workspace::ResetActiveDockSize",
@@ -630,7 +630,7 @@
"ctrl-shift-b": "outline_panel::ToggleFocus",
"ctrl-shift-g": "git_panel::ToggleFocus",
"ctrl-shift-d": "debug_panel::ToggleFocus",
- "ctrl-shift-/": "agent::ToggleFocus",
+ "ctrl-shift-/": "agent::ToggleAgentDrawer",
"ctrl-k s": "workspace::SaveAll",
"ctrl-k n": "encoding_selector::Toggle",
"ctrl-k m": "language_selector::Toggle",
@@ -657,22 +657,22 @@
// "foo-bar": ["task::Spawn", { "task_tag": "MyTag" }],
"f5": "debugger::Rerun",
"ctrl-f4": "workspace::CloseActiveDock",
- "ctrl-w": "workspace::CloseActiveDock",
- },
+ "ctrl-w": "workspace::CloseActiveDock"
+ }
},
{
"context": "Workspace && debugger_running",
"use_key_equivalents": true,
"bindings": {
- "f5": "zed::NoAction",
- },
+ "f5": "zed::NoAction"
+ }
},
{
"context": "Workspace && debugger_stopped",
"use_key_equivalents": true,
"bindings": {
- "f5": "debugger::Continue",
- },
+ "f5": "debugger::Continue"
+ }
},
{
"context": "WorkspaceSidebar",
@@ -681,8 +681,8 @@
"ctrl-n": "multi_workspace::NewWorkspaceInWindow",
"left": "agents_sidebar::CollapseSelectedEntry",
"right": "agents_sidebar::ExpandSelectedEntry",
- "enter": "menu::Confirm",
- },
+ "enter": "menu::Confirm"
+ }
},
{
"context": "ApplicationMenu",
@@ -690,8 +690,8 @@
"bindings": {
"f10": "menu::Cancel",
"left": "app_menu::ActivateMenuLeft",
- "right": "app_menu::ActivateMenuRight",
- },
+ "right": "app_menu::ActivateMenuRight"
+ }
},
// Bindings from Sublime Text
{
@@ -708,8 +708,8 @@
"ctrl-alt-left": "editor::MoveToPreviousSubwordStart",
"ctrl-alt-right": "editor::MoveToNextSubwordEnd",
"ctrl-shift-alt-left": "editor::SelectToPreviousSubwordStart",
- "ctrl-shift-alt-right": "editor::SelectToNextSubwordEnd",
- },
+ "ctrl-shift-alt-right": "editor::SelectToNextSubwordEnd"
+ }
},
// Bindings from Atom
{
@@ -719,16 +719,16 @@
"ctrl-k up": "pane::SplitUp",
"ctrl-k down": "pane::SplitDown",
"ctrl-k left": "pane::SplitLeft",
- "ctrl-k right": "pane::SplitRight",
- },
+ "ctrl-k right": "pane::SplitRight"
+ }
},
// Bindings that should be unified with bindings for more general actions
{
"context": "Editor && renaming",
"use_key_equivalents": true,
"bindings": {
- "enter": "editor::ConfirmRename",
- },
+ "enter": "editor::ConfirmRename"
+ }
},
{
"context": "Editor && showing_completions",
@@ -736,22 +736,22 @@
"bindings": {
"enter": "editor::ConfirmCompletion",
"shift-enter": "editor::ConfirmCompletionReplace",
- "tab": "editor::ComposeCompletion",
- },
+ "tab": "editor::ComposeCompletion"
+ }
},
{
"context": "Editor && in_snippet && has_next_tabstop && !showing_completions",
"use_key_equivalents": true,
"bindings": {
- "tab": "editor::NextSnippetTabstop",
- },
+ "tab": "editor::NextSnippetTabstop"
+ }
},
{
"context": "Editor && in_snippet && has_previous_tabstop && !showing_completions",
"use_key_equivalents": true,
"bindings": {
- "shift-tab": "editor::PreviousSnippetTabstop",
- },
+ "shift-tab": "editor::PreviousSnippetTabstop"
+ }
},
// Bindings for accepting edit predictions
//
@@ -765,8 +765,8 @@
"alt-l": "editor::AcceptEditPrediction",
"tab": "editor::AcceptEditPrediction",
"alt-k": "editor::AcceptNextWordEditPrediction",
- "alt-j": "editor::AcceptNextLineEditPrediction",
- },
+ "alt-j": "editor::AcceptNextLineEditPrediction"
+ }
},
{
"context": "Editor && edit_prediction_conflict",
@@ -775,15 +775,15 @@
"alt-tab": "editor::AcceptEditPrediction",
"alt-l": "editor::AcceptEditPrediction",
"alt-k": "editor::AcceptNextWordEditPrediction",
- "alt-j": "editor::AcceptNextLineEditPrediction",
- },
+ "alt-j": "editor::AcceptNextLineEditPrediction"
+ }
},
{
"context": "Editor && showing_code_actions",
"use_key_equivalents": true,
"bindings": {
- "enter": "editor::ConfirmCodeAction",
- },
+ "enter": "editor::ConfirmCodeAction"
+ }
},
{
"context": "Editor && (showing_code_actions || showing_completions)",
@@ -794,16 +794,16 @@
"ctrl-n": "editor::ContextMenuNext",
"down": "editor::ContextMenuNext",
"pageup": "editor::ContextMenuFirst",
- "pagedown": "editor::ContextMenuLast",
- },
+ "pagedown": "editor::ContextMenuLast"
+ }
},
{
"context": "Editor && showing_signature_help && !showing_completions",
"use_key_equivalents": true,
"bindings": {
"up": "editor::SignatureHelpPrevious",
- "down": "editor::SignatureHelpNext",
- },
+ "down": "editor::SignatureHelpNext"
+ }
},
// Custom bindings
{
@@ -811,15 +811,15 @@
"bindings": {
"ctrl-shift-alt-f": "workspace::FollowNextCollaborator",
// Only available in debug builds: opens an element inspector for development.
- "shift-alt-i": "dev::ToggleInspector",
- },
+ "shift-alt-i": "dev::ToggleInspector"
+ }
},
{
"context": "!Terminal",
"use_key_equivalents": true,
"bindings": {
- "ctrl-shift-c": "collab_panel::ToggleFocus",
- },
+ "ctrl-shift-c": "collab_panel::ToggleFocus"
+ }
},
{
"context": "!ContextEditor && !AcpThread > Editor && mode == full",
@@ -832,8 +832,8 @@
"ctrl-f8": "editor::GoToHunk",
"ctrl-shift-f8": "editor::GoToPreviousHunk",
"ctrl-enter": "assistant::InlineAssist",
- "ctrl-shift-;": "editor::ToggleInlayHints",
- },
+ "ctrl-shift-;": "editor::ToggleInlayHints"
+ }
},
{
"context": "InlineAssistant",
@@ -842,8 +842,8 @@
"ctrl-[": "agent::CyclePreviousInlineAssist",
"ctrl-]": "agent::CycleNextInlineAssist",
"ctrl-shift-enter": "inline_assistant::ThumbsUpResult",
- "ctrl-shift-delete": "inline_assistant::ThumbsDownResult",
- },
+ "ctrl-shift-delete": "inline_assistant::ThumbsDownResult"
+ }
},
{
"context": "Prompt",
@@ -852,15 +852,15 @@
"left": "menu::SelectPrevious",
"right": "menu::SelectNext",
"h": "menu::SelectPrevious",
- "l": "menu::SelectNext",
- },
+ "l": "menu::SelectNext"
+ }
},
{
"context": "ProjectSearchBar && !in_replace",
"use_key_equivalents": true,
"bindings": {
- "ctrl-enter": "project_search::SearchInNew",
- },
+ "ctrl-enter": "project_search::SearchInNew"
+ }
},
{
"context": "OutlinePanel && not_editing",
@@ -875,8 +875,8 @@
"shift-down": "menu::SelectNext",
"shift-up": "menu::SelectPrevious",
"alt-enter": "editor::OpenExcerpts",
- "ctrl-alt-enter": "editor::OpenExcerptsSplit",
- },
+ "ctrl-alt-enter": "editor::OpenExcerptsSplit"
+ }
},
{
"context": "ProjectPanel",
@@ -907,15 +907,15 @@
"ctrl-k ctrl-shift-f": "project_panel::NewSearchInDirectory",
"shift-down": "menu::SelectNext",
"shift-up": "menu::SelectPrevious",
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "ProjectPanel && not_editing",
"use_key_equivalents": true,
"bindings": {
- "space": "project_panel::Open",
- },
+ "space": "project_panel::Open"
+ }
},
{
"context": "GitPanel && ChangesList",
@@ -938,15 +938,15 @@
"backspace": ["git::RestoreFile", { "skip_prompt": false }],
"shift-delete": ["git::RestoreFile", { "skip_prompt": false }],
"ctrl-backspace": ["git::RestoreFile", { "skip_prompt": false }],
- "ctrl-delete": ["git::RestoreFile", { "skip_prompt": false }],
- },
+ "ctrl-delete": ["git::RestoreFile", { "skip_prompt": false }]
+ }
},
{
"context": "GitPanel && CommitEditor",
"use_key_equivalents": true,
"bindings": {
- "escape": "git::Cancel",
- },
+ "escape": "git::Cancel"
+ }
},
{
"context": "GitCommit > Editor",
@@ -956,8 +956,8 @@
"enter": "editor::Newline",
"ctrl-enter": "git::Commit",
"ctrl-shift-enter": "git::Amend",
- "alt-l": "git::GenerateCommitMessage",
- },
+ "alt-l": "git::GenerateCommitMessage"
+ }
},
{
"context": "GitPanel",
@@ -974,8 +974,8 @@
"ctrl-space": "git::StageAll",
"ctrl-shift-space": "git::UnstageAll",
"ctrl-enter": "git::Commit",
- "ctrl-shift-enter": "git::Amend",
- },
+ "ctrl-shift-enter": "git::Amend"
+ }
},
{
"context": "GitDiff > Editor",
@@ -985,15 +985,15 @@
"ctrl-shift-enter": "git::Amend",
"ctrl-space": "git::StageAll",
"ctrl-shift-space": "git::UnstageAll",
- "ctrl-k ctrl-r": "git::RestoreAndNext",
- },
+ "ctrl-k ctrl-r": "git::RestoreAndNext"
+ }
},
{
"context": "AskPass > Editor",
"use_key_equivalents": true,
"bindings": {
- "enter": "menu::Confirm",
- },
+ "enter": "menu::Confirm"
+ }
},
{
"context": "CommitEditor > Editor",
@@ -1006,8 +1006,8 @@
"ctrl-enter": "git::Commit",
"ctrl-shift-enter": "git::Amend",
"alt-up": "git_panel::FocusChanges",
- "alt-l": "git::GenerateCommitMessage",
- },
+ "alt-l": "git::GenerateCommitMessage"
+ }
},
{
"context": "DebugPanel",
@@ -1015,8 +1015,8 @@
"bindings": {
"ctrl-t": "debugger::ToggleThreadPicker",
"ctrl-i": "debugger::ToggleSessionPicker",
- "shift-alt-escape": "debugger::ToggleExpandItem",
- },
+ "shift-alt-escape": "debugger::ToggleExpandItem"
+ }
},
{
"context": "VariableList",
@@ -1029,8 +1029,8 @@
"ctrl-alt-c": "variable_list::CopyVariableName",
"delete": "variable_list::RemoveWatch",
"backspace": "variable_list::RemoveWatch",
- "alt-enter": "variable_list::AddWatch",
- },
+ "alt-enter": "variable_list::AddWatch"
+ }
},
{
"context": "BreakpointList",
@@ -1039,16 +1039,16 @@
"space": "debugger::ToggleEnableBreakpoint",
"backspace": "debugger::UnsetBreakpoint",
"left": "debugger::PreviousBreakpointProperty",
- "right": "debugger::NextBreakpointProperty",
- },
+ "right": "debugger::NextBreakpointProperty"
+ }
},
{
"context": "CollabPanel && not_editing",
"use_key_equivalents": true,
"bindings": {
"ctrl-backspace": "collab_panel::Remove",
- "space": "menu::Confirm",
- },
+ "space": "menu::Confirm"
+ }
},
{
"context": "CollabPanel",
@@ -1056,22 +1056,22 @@
"bindings": {
"alt-up": "collab_panel::MoveChannelUp",
"alt-down": "collab_panel::MoveChannelDown",
- "alt-enter": "collab_panel::OpenSelectedChannelNotes",
- },
+ "alt-enter": "collab_panel::OpenSelectedChannelNotes"
+ }
},
{
"context": "(CollabPanel && editing) > Editor",
"use_key_equivalents": true,
"bindings": {
- "space": "collab_panel::InsertSpace",
- },
+ "space": "collab_panel::InsertSpace"
+ }
},
{
"context": "ChannelModal",
"use_key_equivalents": true,
"bindings": {
- "tab": "channel_modal::ToggleMode",
- },
+ "tab": "channel_modal::ToggleMode"
+ }
},
{
"context": "Picker > Editor",
@@ -1081,22 +1081,22 @@
"up": "menu::SelectPrevious",
"down": "menu::SelectNext",
"tab": "picker::ConfirmCompletion",
- "alt-enter": ["picker::ConfirmInput", { "secondary": false }],
- },
+ "alt-enter": ["picker::ConfirmInput", { "secondary": false }]
+ }
},
{
"context": "ChannelModal > Picker > Editor",
"use_key_equivalents": true,
"bindings": {
- "tab": "channel_modal::ToggleMode",
- },
+ "tab": "channel_modal::ToggleMode"
+ }
},
{
"context": "ToolchainSelector",
"use_key_equivalents": true,
"bindings": {
- "ctrl-shift-a": "toolchain::AddToolchain",
- },
+ "ctrl-shift-a": "toolchain::AddToolchain"
+ }
},
{
"context": "FileFinder || (FileFinder > Picker > Editor)",
@@ -1104,8 +1104,8 @@
"bindings": {
"ctrl-p": "file_finder::Toggle",
"ctrl-shift-a": "file_finder::ToggleSplitMenu",
- "ctrl-shift-i": "file_finder::ToggleFilterMenu",
- },
+ "ctrl-shift-i": "file_finder::ToggleFilterMenu"
+ }
},
{
"context": "FileFinder || (FileFinder > Picker > Editor) || (FileFinder > Picker > menu)",
@@ -1115,16 +1115,16 @@
"ctrl-j": "pane::SplitDown",
"ctrl-k": "pane::SplitUp",
"ctrl-h": "pane::SplitLeft",
- "ctrl-l": "pane::SplitRight",
- },
+ "ctrl-l": "pane::SplitRight"
+ }
},
{
"context": "RecentProjects || (RecentProjects > Picker > Editor)",
"use_key_equivalents": true,
"bindings": {
"ctrl-k": "recent_projects::ToggleActionsMenu",
- "ctrl-shift-a": "workspace::AddFolderToProject",
- },
+ "ctrl-shift-a": "workspace::AddFolderToProject"
+ }
},
{
"context": "TabSwitcher",
@@ -1133,16 +1133,16 @@
"ctrl-shift-tab": "menu::SelectPrevious",
"ctrl-up": "menu::SelectPrevious",
"ctrl-down": "menu::SelectNext",
- "ctrl-backspace": "tab_switcher::CloseSelectedItem",
- },
+ "ctrl-backspace": "tab_switcher::CloseSelectedItem"
+ }
},
{
"context": "StashList || (StashList > Picker > Editor)",
"use_key_equivalents": true,
"bindings": {
"ctrl-shift-backspace": "stash_picker::DropStashItem",
- "ctrl-shift-v": "stash_picker::ShowStashItem",
- },
+ "ctrl-shift-v": "stash_picker::ShowStashItem"
+ }
},
{
"context": "Terminal",
@@ -1190,21 +1190,21 @@
"ctrl-alt-r": "terminal::RerunTask",
"alt-t": "terminal::RerunTask",
"ctrl-shift-5": "pane::SplitRight",
- "ctrl-shift-.": "agent::AddSelectionToThread",
- },
+ "ctrl-shift-.": "agent::AddSelectionToThread"
+ }
},
{
"context": "Terminal && selection",
"bindings": {
- "ctrl-c": "terminal::Copy",
- },
+ "ctrl-c": "terminal::Copy"
+ }
},
{
"context": "ZedPredictModal",
"use_key_equivalents": true,
"bindings": {
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "ConfigureContextServerModal > Editor",
@@ -1212,45 +1212,45 @@
"bindings": {
"escape": "menu::Cancel",
"enter": "editor::Newline",
- "ctrl-enter": "menu::Confirm",
- },
+ "ctrl-enter": "menu::Confirm"
+ }
},
{
"context": "ContextServerToolsModal",
"use_key_equivalents": true,
"bindings": {
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "OnboardingAiConfigurationModal",
"use_key_equivalents": true,
"bindings": {
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "Diagnostics",
"use_key_equivalents": true,
"bindings": {
- "ctrl-r": "diagnostics::ToggleDiagnosticsRefresh",
- },
+ "ctrl-r": "diagnostics::ToggleDiagnosticsRefresh"
+ }
},
{
"context": "DebugConsole > Editor",
"use_key_equivalents": true,
"bindings": {
"enter": "menu::Confirm",
- "alt-enter": "console::WatchExpression",
- },
+ "alt-enter": "console::WatchExpression"
+ }
},
{
"context": "RunModal",
"use_key_equivalents": true,
"bindings": {
"ctrl-tab": "pane::ActivateNextItem",
- "ctrl-shift-tab": "pane::ActivatePreviousItem",
- },
+ "ctrl-shift-tab": "pane::ActivatePreviousItem"
+ }
},
{
"context": "MarkdownPreview",
@@ -1261,8 +1261,8 @@
"up": "markdown::ScrollUp",
"down": "markdown::ScrollDown",
"alt-up": "markdown::ScrollUpByItem",
- "alt-down": "markdown::ScrollDownByItem",
- },
+ "alt-down": "markdown::ScrollDownByItem"
+ }
},
{
"context": "KeymapEditor",
@@ -1277,8 +1277,8 @@
"ctrl-c": "keymap_editor::CopyAction",
"ctrl-shift-c": "keymap_editor::CopyContext",
"ctrl-t": "keymap_editor::ShowMatchingKeybinds",
- "ctrl-e": "zed::OpenKeymapFile",
- },
+ "ctrl-e": "zed::OpenKeymapFile"
+ }
},
{
"context": "KeystrokeInput",
@@ -1286,24 +1286,24 @@
"bindings": {
"enter": "keystroke_input::StartRecording",
"escape escape escape": "keystroke_input::StopRecording",
- "delete": "keystroke_input::ClearKeystrokes",
- },
+ "delete": "keystroke_input::ClearKeystrokes"
+ }
},
{
"context": "KeybindEditorModal",
"use_key_equivalents": true,
"bindings": {
"ctrl-enter": "menu::Confirm",
- "escape": "menu::Cancel",
- },
+ "escape": "menu::Cancel"
+ }
},
{
"context": "KeybindEditorModal > Editor",
"use_key_equivalents": true,
"bindings": {
"up": "menu::SelectPrevious",
- "down": "menu::SelectNext",
- },
+ "down": "menu::SelectNext"
+ }
},
{
"context": "Onboarding",
@@ -66,9 +66,8 @@ use fs::Fs;
use git::repository::validate_worktree_directory;
use gpui::{
Action, Animation, AnimationExt, AnyElement, AnyView, App, AsyncWindowContext, ClipboardItem,
- Corner, DismissEvent, DragMoveEvent, Entity, EventEmitter, ExternalPaths, FocusHandle,
- Focusable, KeyContext, MouseButton, Pixels, Subscription, Task, UpdateGlobal, WeakEntity,
- deferred, prelude::*, pulsating_between,
+ Corner, DismissEvent, Entity, EventEmitter, ExternalPaths, FocusHandle, Focusable, KeyContext,
+ Pixels, Subscription, Task, UpdateGlobal, WeakEntity, prelude::*, pulsating_between,
};
use language::LanguageRegistry;
use language_model::{ConfigurationError, LanguageModelRegistry};
@@ -80,77 +79,26 @@ use search::{BufferSearchBar, buffer_search};
use settings::{Settings, update_settings_file};
use theme::ThemeSettings;
use ui::{
- Button, ButtonLike, Callout, ContextMenu, ContextMenuEntry, DocumentationSide, Indicator,
- KeyBinding, PopoverMenu, PopoverMenuHandle, SpinnerLabel, Tab, TintColor, Tooltip, prelude::*,
+ Button, ButtonLike, Callout, ContextMenu, ContextMenuEntry, DocumentationSide, KeyBinding,
+ PopoverMenu, PopoverMenuHandle, SpinnerLabel, Tab, TintColor, Tooltip, prelude::*,
utils::WithRemSize,
};
use util::{ResultExt as _, debug_panic};
use workspace::{
- CollaboratorId, DraggedSelection, DraggedSidebar, DraggedTab, FocusWorkspaceSidebar,
- MultiWorkspace, OpenResult, SIDEBAR_RESIZE_HANDLE_SIZE, ToggleWorkspaceSidebar, ToggleZoom,
- ToolbarItemView, Workspace, WorkspaceId,
+ CollaboratorId, DraggedSelection, DraggedTab, OpenResult, ToggleZoom, ToolbarItemView,
+ Workspace, WorkspaceId,
dock::{DockPosition, Panel, PanelEvent},
- multi_workspace_enabled,
};
use zed_actions::{
DecreaseBufferFontSize, IncreaseBufferFontSize, ResetBufferFontSize,
agent::{OpenAcpOnboardingModal, OpenSettings, ResetAgentZoom, ResetOnboarding},
- assistant::{OpenRulesLibrary, Toggle, ToggleFocus},
+ assistant::{OpenRulesLibrary, Toggle, ToggleAgentDrawer, ToggleFocus},
};
const AGENT_PANEL_KEY: &str = "agent_panel";
const RECENTLY_UPDATED_MENU_LIMIT: usize = 6;
const DEFAULT_THREAD_TITLE: &str = "New Thread";
-#[derive(Default)]
-struct SidebarsByWindow(
- collections::HashMap<gpui::WindowId, gpui::WeakEntity<crate::sidebar::Sidebar>>,
-);
-
-impl gpui::Global for SidebarsByWindow {}
-
-pub(crate) fn sidebar_is_open(window: &Window, cx: &App) -> bool {
- if !multi_workspace_enabled(cx) {
- return false;
- }
- let window_id = window.window_handle().window_id();
- cx.try_global::<SidebarsByWindow>()
- .and_then(|sidebars| sidebars.0.get(&window_id)?.upgrade())
- .is_some_and(|sidebar| sidebar.read(cx).is_open())
-}
-
-fn find_or_create_sidebar_for_window(
- window: &mut Window,
- cx: &mut App,
-) -> Option<Entity<crate::sidebar::Sidebar>> {
- let window_id = window.window_handle().window_id();
- let multi_workspace = window.root::<MultiWorkspace>().flatten()?;
-
- if !cx.has_global::<SidebarsByWindow>() {
- cx.set_global(SidebarsByWindow::default());
- }
-
- cx.global_mut::<SidebarsByWindow>()
- .0
- .retain(|_, weak| weak.upgrade().is_some());
-
- let existing = cx
- .global::<SidebarsByWindow>()
- .0
- .get(&window_id)
- .and_then(|weak| weak.upgrade());
-
- if let Some(sidebar) = existing {
- return Some(sidebar);
- }
-
- let sidebar = cx.new(|cx| crate::sidebar::Sidebar::new(multi_workspace, window, cx));
- cx.global_mut::<SidebarsByWindow>()
- .0
- .insert(window_id, sidebar.downgrade());
- Some(sidebar)
-}
-
fn read_serialized_panel(workspace_id: workspace::WorkspaceId) -> Option<SerializedAgentPanel> {
let scope = KEY_VALUE_STORE.scoped(AGENT_PANEL_KEY);
let key = i64::from(workspace_id).to_string();
@@ -472,35 +420,26 @@ pub fn init(cx: &mut App) {
});
}
})
- .register_action(|workspace, _: &ToggleWorkspaceSidebar, window, cx| {
- if !multi_workspace_enabled(cx) {
+ .register_action(|workspace, _: &ToggleAgentDrawer, _window, cx| {
+ let Some(panel) = workspace.panel::<AgentPanel>(cx) else {
return;
- }
- if let Some(panel) = workspace.panel::<AgentPanel>(cx) {
- if let Some(sidebar) = panel.read(cx).sidebar.clone() {
- let was_open = sidebar.read(cx).is_open();
- sidebar.update(cx, |sidebar, cx| {
- sidebar.toggle(window, cx);
- });
- // When closing the sidebar, restore focus to the active pane
- // to avoid "zombie focus" on the now-hidden sidebar elements
- if was_open {
- let active_pane = workspace.active_pane().clone();
- let pane_focus = active_pane.read(cx).focus_handle(cx);
- window.focus(&pane_focus, cx);
+ };
+ let panel_view: AnyView = panel.into();
+ let dock_position = agent_panel_dock_position(cx);
+ match dock_position {
+ DockPosition::Right => {
+ if workspace.right_drawer_view().is_none() {
+ workspace.set_right_drawer(panel_view, cx);
+ } else {
+ workspace.toggle_right_drawer(cx);
}
}
- }
- })
- .register_action(|workspace, _: &FocusWorkspaceSidebar, window, cx| {
- if !multi_workspace_enabled(cx) {
- return;
- }
- if let Some(panel) = workspace.panel::<AgentPanel>(cx) {
- if let Some(sidebar) = panel.read(cx).sidebar.clone() {
- sidebar.update(cx, |sidebar, cx| {
- sidebar.focus_or_unfocus(workspace, window, cx);
- });
+ DockPosition::Left | DockPosition::Bottom => {
+ if workspace.left_drawer_view().is_none() {
+ workspace.set_left_drawer(panel_view, cx);
+ } else {
+ workspace.toggle_left_drawer(cx);
+ }
}
}
});
@@ -898,7 +837,6 @@ pub struct AgentPanel {
last_configuration_error_telemetry: Option<String>,
on_boarding_upsell_dismissed: AtomicBool,
_active_view_observation: Option<Subscription>,
- pub(crate) sidebar: Option<Entity<crate::sidebar::Sidebar>>,
}
impl AgentPanel {
@@ -1224,17 +1162,11 @@ impl AgentPanel {
last_configuration_error_telemetry: None,
on_boarding_upsell_dismissed: AtomicBool::new(OnboardingUpsell::dismissed()),
_active_view_observation: None,
- sidebar: None,
};
// Initial sync of agent servers from extensions
panel.sync_agent_servers_from_extensions(cx);
- cx.defer_in(window, move |this, window, cx| {
- this.sidebar = find_or_create_sidebar_for_window(window, cx);
- cx.notify();
- });
-
panel
}
@@ -3236,7 +3168,7 @@ impl Panel for AgentPanel {
}
fn toggle_action(&self) -> Box<dyn Action> {
- Box::new(ToggleFocus)
+ Box::new(ToggleAgentDrawer)
}
fn activation_priority(&self) -> u32 {
@@ -3744,127 +3676,6 @@ impl AgentPanel {
y: px(1.0),
})
}
-
- fn sidebar_info(&self, cx: &App) -> Option<(AnyView, Pixels, bool)> {
- if !multi_workspace_enabled(cx) {
- return None;
- }
- let sidebar = self.sidebar.as_ref()?;
- let is_open = sidebar.read(cx).is_open();
- let width = sidebar.read(cx).width(cx);
- let view: AnyView = sidebar.clone().into();
- Some((view, width, is_open))
- }
-
- fn render_sidebar_toggle(&self, docked_right: bool, cx: &Context<Self>) -> Option<AnyElement> {
- if !multi_workspace_enabled(cx) {
- return None;
- }
- let sidebar = self.sidebar.as_ref()?;
- let sidebar_read = sidebar.read(cx);
- if sidebar_read.is_open() {
- return None;
- }
- let has_notifications = sidebar_read.has_notifications(cx);
-
- let icon = if docked_right {
- IconName::ThreadsSidebarRightClosed
- } else {
- IconName::ThreadsSidebarLeftClosed
- };
-
- Some(
- h_flex()
- .h_full()
- .px_1()
- .map(|this| {
- if docked_right {
- this.border_l_1()
- } else {
- this.border_r_1()
- }
- })
- .border_color(cx.theme().colors().border_variant)
- .child(
- IconButton::new("toggle-workspace-sidebar", icon)
- .icon_size(IconSize::Small)
- .when(has_notifications, |button| {
- button
- .indicator(Indicator::dot().color(Color::Accent))
- .indicator_border_color(Some(
- cx.theme().colors().tab_bar_background,
- ))
- })
- .tooltip(move |_, cx| {
- Tooltip::for_action("Open Threads Sidebar", &ToggleWorkspaceSidebar, cx)
- })
- .on_click(|_, window, cx| {
- window.dispatch_action(ToggleWorkspaceSidebar.boxed_clone(), cx);
- }),
- )
- .into_any_element(),
- )
- }
-
- fn render_sidebar(&self, cx: &Context<Self>) -> Option<AnyElement> {
- let (sidebar_view, sidebar_width, is_open) = self.sidebar_info(cx)?;
- if !is_open {
- return None;
- }
-
- let docked_right = agent_panel_dock_position(cx) == DockPosition::Right;
- let sidebar = self.sidebar.as_ref()?.downgrade();
-
- let resize_handle = deferred(
- div()
- .id("sidebar-resize-handle")
- .absolute()
- .when(docked_right, |this| {
- this.left(-SIDEBAR_RESIZE_HANDLE_SIZE / 2.)
- })
- .when(!docked_right, |this| {
- this.right(-SIDEBAR_RESIZE_HANDLE_SIZE / 2.)
- })
- .top(px(0.))
- .h_full()
- .w(SIDEBAR_RESIZE_HANDLE_SIZE)
- .cursor_col_resize()
- .on_drag(DraggedSidebar, |dragged, _, _, cx| {
- cx.stop_propagation();
- cx.new(|_| dragged.clone())
- })
- .on_mouse_down(MouseButton::Left, |_, _, cx| {
- cx.stop_propagation();
- })
- .on_mouse_up(MouseButton::Left, move |event, _, cx| {
- if event.click_count == 2 {
- sidebar
- .update(cx, |sidebar, cx| {
- sidebar.set_width(None, cx);
- })
- .ok();
- cx.stop_propagation();
- }
- })
- .occlude(),
- );
-
- Some(
- div()
- .id("sidebar-container")
- .relative()
- .h_full()
- .w(sidebar_width)
- .flex_shrink_0()
- .when(docked_right, |this| this.border_l_1())
- .when(!docked_right, |this| this.border_r_1())
- .border_color(cx.theme().colors().border)
- .child(sidebar_view)
- .child(resize_handle)
- .into_any_element(),
- )
- }
-
fn render_toolbar(&self, window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
let agent_server_store = self.project.read(cx).agent_server_store().clone();
let focus_handle = self.focus_handle(cx);
@@ -4261,12 +4072,6 @@ impl AgentPanel {
let use_v2_empty_toolbar =
has_v2_flag && is_empty_state && !is_in_history_or_config && !is_text_thread;
- let is_sidebar_open = self
- .sidebar
- .as_ref()
- .map(|s| s.read(cx).is_open())
- .unwrap_or(false);
-
let base_container = h_flex()
.id("agent-panel-toolbar")
.h(Tab::container_height(cx))
@@ -4341,10 +4146,7 @@ impl AgentPanel {
h_flex()
.size_full()
.gap_1()
- .when(is_sidebar_open || docked_right, |this| this.pl_1())
- .when(!docked_right, |this| {
- this.children(self.render_sidebar_toggle(false, cx))
- })
+ .when(docked_right, |this| this.pl_1())
.child(agent_selector_menu)
.child(self.render_start_thread_in_selector(cx)),
)
@@ -4362,10 +4164,7 @@ impl AgentPanel {
cx,
))
})
- .child(self.render_panel_options_menu(window, cx))
- .when(docked_right, |this| {
- this.children(self.render_sidebar_toggle(true, cx))
- }),
+ .child(self.render_panel_options_menu(window, cx)),
)
.into_any_element()
} else {
@@ -4393,15 +4192,12 @@ impl AgentPanel {
h_flex()
.size_full()
.map(|this| {
- if is_sidebar_open || docked_right {
+ if docked_right {
this.pl_1().gap_1()
} else {
this.pl_0().gap_0p5()
}
})
- .when(!docked_right, |this| {
- this.children(self.render_sidebar_toggle(false, cx))
- })
.child(match &self.active_view {
ActiveView::History { .. } | ActiveView::Configuration => {
self.render_toolbar_back_button(cx).into_any_element()
@@ -4425,10 +4221,7 @@ impl AgentPanel {
cx,
))
})
- .child(self.render_panel_options_menu(window, cx))
- .when(docked_right, |this| {
- this.children(self.render_sidebar_toggle(true, cx))
- }),
+ .child(self.render_panel_options_menu(window, cx)),
)
.into_any_element()
}
@@ -4973,44 +4766,14 @@ impl Render for AgentPanel {
})
.children(self.render_trial_end_upsell(window, cx));
- let sidebar = self.render_sidebar(cx);
- let has_sidebar = sidebar.is_some();
- let docked_right = agent_panel_dock_position(cx) == DockPosition::Right;
-
- let panel = h_flex()
- .size_full()
- .when(has_sidebar, |this| {
- this.on_drag_move(cx.listener(
- move |this, e: &DragMoveEvent<DraggedSidebar>, _window, cx| {
- if let Some(sidebar) = &this.sidebar {
- let width = if docked_right {
- e.bounds.right() - e.event.position.x
- } else {
- e.event.position.x
- };
- sidebar.update(cx, |sidebar, cx| {
- sidebar.set_width(Some(width), cx);
- });
- }
- },
- ))
- })
- .map(|this| {
- if docked_right {
- this.child(content).children(sidebar)
- } else {
- this.children(sidebar).child(content)
- }
- });
-
match self.active_view.which_font_size_used() {
WhichFontSize::AgentFont => {
WithRemSize::new(ThemeSettings::get_global(cx).agent_ui_font_size(cx))
.size_full()
- .child(panel)
+ .child(content)
.into_any()
}
- _ => panel.into_any(),
+ _ => content.into_any(),
}
}
}
@@ -2347,8 +2347,7 @@ impl ConnectionView {
}
if let Some(multi_workspace) = window.root::<MultiWorkspace>().flatten() {
- crate::agent_panel::sidebar_is_open(window, cx)
- || self.agent_panel_visible(&multi_workspace, cx)
+ self.agent_panel_visible(&multi_workspace, cx)
} else {
self.workspace
.upgrade()
@@ -10,8 +10,9 @@ use db::kvp::KEY_VALUE_STORE;
use editor::Editor;
use feature_flags::{AgentV2FeatureFlag, FeatureFlagViewExt as _};
use gpui::{
- Action as _, AnyElement, App, Context, Entity, FocusHandle, Focusable, ListState, Pixels,
- Render, SharedString, WeakEntity, Window, actions, list, prelude::*, px,
+ Action, AnyElement, App, AsyncWindowContext, Context, Entity, EventEmitter, FocusHandle,
+ Focusable, ListState, Pixels, Render, SharedString, Task, WeakEntity, Window, actions, list,
+ prelude::*, px,
};
use menu::{Cancel, Confirm, SelectFirst, SelectLast, SelectNext, SelectPrevious};
use project::Event as ProjectEvent;
@@ -28,8 +29,11 @@ use ui::{
use util::ResultExt as _;
use util::path_list::PathList;
use workspace::{
- MultiWorkspace, MultiWorkspaceEvent, ToggleWorkspaceSidebar, Workspace, multi_workspace_enabled,
+ MultiWorkspace, MultiWorkspaceEvent, Workspace,
+ dock::{DockPosition, Panel, PanelEvent},
+ multi_workspace_enabled,
};
+use zed_actions::assistant::ToggleThreadsSidebar;
use zed_actions::editor::{MoveDown, MoveUp};
actions!(
@@ -261,6 +265,23 @@ pub struct Sidebar {
}
impl Sidebar {
+ pub fn load(
+ _workspace: WeakEntity<Workspace>,
+ mut cx: AsyncWindowContext,
+ ) -> Task<anyhow::Result<Entity<Self>>> {
+ let result = cx
+ .update(|window, cx| {
+ let multi_workspace = window
+ .root::<MultiWorkspace>()
+ .flatten()
+ .ok_or_else(|| anyhow::anyhow!("no MultiWorkspace root found"))?;
+ Ok(cx.new(|cx| Self::new(multi_workspace, window, cx)))
+ })
+ .map_err(|e| anyhow::anyhow!("failed to access window: {e}"))
+ .and_then(|r| r);
+ Task::ready(result)
+ }
+
pub fn new(
multi_workspace: Entity<MultiWorkspace>,
window: &mut Window,
@@ -1716,25 +1737,19 @@ impl Sidebar {
.into_any_element()
}
- fn render_thread_list_header(
- &self,
- docked_right: bool,
- cx: &mut Context<Self>,
- ) -> impl IntoElement {
+ fn render_thread_list_header(&self, cx: &mut Context<Self>) -> impl IntoElement {
let has_query = self.has_filter_query(cx);
h_flex()
.h(Tab::container_height(cx))
.flex_none()
.gap_1p5()
+ .px_1p5()
.border_b_1()
.border_color(cx.theme().colors().border)
- .when(!docked_right, |this| {
- this.child(self.render_sidebar_toggle_button(false, cx))
- })
.child(self.render_filter_input())
.when(has_query, |this| {
- this.when(!docked_right, |this| this.pr_1p5()).child(
+ this.child(
IconButton::new("clear_filter", IconName::Close)
.shape(IconButtonShape::Square)
.tooltip(Tooltip::text("Clear Search"))
@@ -1744,11 +1759,6 @@ impl Sidebar {
})),
)
})
- .when(docked_right, |this| {
- this.pl_2()
- .pr_0p5()
- .child(self.render_sidebar_toggle_button(true, cx))
- })
}
fn render_thread_list_footer(&self, cx: &mut Context<Self>) -> impl IntoElement {
@@ -1770,40 +1780,6 @@ impl Sidebar {
})),
)
}
-
- fn render_sidebar_toggle_button(
- &self,
- docked_right: bool,
- cx: &mut Context<Self>,
- ) -> impl IntoElement {
- let icon = if docked_right {
- IconName::ThreadsSidebarRightOpen
- } else {
- IconName::ThreadsSidebarLeftOpen
- };
-
- h_flex()
- .h_full()
- .px_1()
- .map(|this| {
- if docked_right {
- this.pr_1p5().border_l_1()
- } else {
- this.border_r_1()
- }
- })
- .border_color(cx.theme().colors().border_variant)
- .child(
- IconButton::new("sidebar-close-toggle", icon)
- .icon_size(IconSize::Small)
- .tooltip(move |_, cx| {
- Tooltip::for_action("Close Threads Sidebar", &ToggleWorkspaceSidebar, cx)
- })
- .on_click(|_, window, cx| {
- window.dispatch_action(ToggleWorkspaceSidebar.boxed_clone(), cx);
- }),
- )
- }
}
impl Sidebar {
@@ -1936,6 +1912,68 @@ impl Focusable for Sidebar {
}
}
+impl EventEmitter<PanelEvent> for Sidebar {}
+
+impl Panel for Sidebar {
+ fn persistent_name() -> &'static str {
+ "ThreadsSidebar"
+ }
+
+ fn panel_key() -> &'static str {
+ "threads_sidebar"
+ }
+
+ fn position(&self, _window: &Window, cx: &App) -> DockPosition {
+ AgentSettings::get_global(cx).dock.into()
+ }
+
+ fn position_is_valid(&self, position: DockPosition) -> bool {
+ position != DockPosition::Bottom
+ }
+
+ fn set_position(
+ &mut self,
+ _position: DockPosition,
+ _window: &mut Window,
+ _cx: &mut Context<Self>,
+ ) {
+ // Position is derived from agent settings and follows the agent panel
+ }
+
+ fn size(&self, _window: &Window, _cx: &App) -> Pixels {
+ self.width
+ }
+
+ fn set_size(&mut self, size: Option<Pixels>, _window: &mut Window, cx: &mut Context<Self>) {
+ self.set_width(size, cx);
+ }
+
+ fn icon(&self, _window: &Window, cx: &App) -> Option<IconName> {
+ let settings = AgentSettings::get_global(cx);
+ (settings.enabled(cx) && settings.button).then_some(IconName::ThreadsSidebarLeftClosed)
+ }
+
+ fn icon_tooltip(&self, _window: &Window, _cx: &App) -> Option<&'static str> {
+ Some("Threads Sidebar")
+ }
+
+ fn toggle_action(&self) -> Box<dyn Action> {
+ Box::new(ToggleThreadsSidebar)
+ }
+
+ fn activation_priority(&self) -> u32 {
+ 4
+ }
+
+ fn enabled(&self, cx: &App) -> bool {
+ AgentSettings::get_global(cx).enabled(cx)
+ }
+
+ fn starts_open(&self, _window: &Window, _cx: &App) -> bool {
+ self.is_open
+ }
+}
+
impl Render for Sidebar {
fn render(&mut self, window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
let ui_font = theme::setup_ui_font(window, cx);
@@ -1961,7 +1999,7 @@ impl Render for Sidebar {
.bg(cx.theme().colors().surface_background)
.map(|this| match self.view {
SidebarView::ThreadList => this
- .child(self.render_thread_list_header(docked_right, cx))
+ .child(self.render_thread_list_header(cx))
.child(
v_flex()
.relative()
@@ -2071,11 +2109,9 @@ mod tests {
});
});
cx.run_until_parked();
- let sidebar = panel.read_with(cx, |panel, _cx| {
- panel
- .sidebar
- .clone()
- .expect("AgentPanel should have created a sidebar")
+ let multi_workspace_entity = multi_workspace.clone();
+ let sidebar = workspace.update_in(cx, |_, window, cx| {
+ cx.new(|cx| Sidebar::new(multi_workspace_entity, window, cx))
});
(sidebar, panel)
}
@@ -707,6 +707,14 @@ async fn initialize_agent_panel(
})?
.await?;
+ workspace_handle
+ .update_in(&mut cx, |workspace, window, cx| {
+ setup_or_teardown_ai_panel(workspace, window, cx, |workspace, cx| {
+ agent_ui::sidebar::Sidebar::load(workspace, cx)
+ })
+ })?
+ .await?;
+
workspace_handle.update_in(&mut cx, |workspace, window, cx| {
let prompt_builder = prompt_builder.clone();
cx.observe_global_in::<SettingsStore>(window, move |workspace, window, cx| {
@@ -715,6 +723,10 @@ async fn initialize_agent_panel(
agent_ui::AgentPanel::load(workspace, prompt_builder, cx)
})
.detach_and_log_err(cx);
+ setup_or_teardown_ai_panel(workspace, window, cx, |workspace, cx| {
+ agent_ui::sidebar::Sidebar::load(workspace, cx)
+ })
+ .detach_and_log_err(cx);
})
.detach();
@@ -1033,6 +1045,15 @@ fn register_actions(
workspace.toggle_panel_focus::<TerminalPanel>(window, cx);
},
)
+ .register_action(
+ |workspace: &mut Workspace,
+ _: &zed_actions::assistant::ToggleThreadsSidebar,
+ window: &mut Window,
+ cx: &mut Context<Workspace>| {
+ workspace
+ .toggle_panel_focus::<agent_ui::sidebar::Sidebar>(window, cx);
+ },
+ )
.register_action({
let app_state = Arc::downgrade(&app_state);
move |_, _: &NewWindow, _, cx| {
@@ -516,7 +516,11 @@ pub mod assistant {
/// Toggles the agent panel.
Toggle,
#[action(deprecated_aliases = ["assistant::ToggleFocus"])]
- ToggleFocus
+ ToggleFocus,
+ /// Toggles the agent drawer open or closed.
+ ToggleAgentDrawer,
+ /// Toggles the threads sidebar panel in the status bar.
+ ToggleThreadsSidebar
]
);