diff --git a/Cargo.lock b/Cargo.lock index 5b3ac97f36..ffbc1d7ee1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8953,6 +8953,46 @@ dependencies = [ "uuid", ] +[[package]] +name = "keymap_editor" +version = "0.1.0" +dependencies = [ + "anyhow", + "collections", + "command_palette", + "command_palette_hooks", + "component", + "db", + "editor", + "feature_flags", + "fs", + "fuzzy", + "gpui", + "itertools 0.14.0", + "language", + "log", + "menu", + "notifications", + "paths", + "project", + "search", + "serde", + "serde_json", + "settings", + "telemetry", + "tempfile", + "theme", + "tree-sitter-json", + "tree-sitter-rust", + "ui", + "ui_input", + "util", + "vim", + "workspace", + "workspace-hack", + "zed_actions", +] + [[package]] name = "khronos-egl" version = "6.0.0" @@ -14892,39 +14932,16 @@ name = "settings_ui" version = "0.1.0" dependencies = [ "anyhow", - "collections", "command_palette", "command_palette_hooks", - "component", - "db", "editor", "feature_flags", - "fs", - "fuzzy", "gpui", - "itertools 0.14.0", - "language", - "log", - "menu", - "notifications", - "paths", - "project", - "search", - "serde", - "serde_json", "settings", - "telemetry", - "tempfile", "theme", - "tree-sitter-json", - "tree-sitter-rust", "ui", - "ui_input", "util", - "vim", "workspace", - "workspace-hack", - "zed_actions", ] [[package]] @@ -16749,6 +16766,7 @@ dependencies = [ "db", "gpui", "http_client", + "keymap_editor", "notifications", "pretty_assertions", "project", @@ -16757,7 +16775,6 @@ dependencies = [ "schemars", "serde", "settings", - "settings_ui", "smallvec", "story", "telemetry", @@ -20469,6 +20486,7 @@ dependencies = [ "itertools 0.14.0", "jj_ui", "journal", + "keymap_editor", "language", "language_extension", "language_model", diff --git a/Cargo.toml b/Cargo.toml index 6ecca122a9..7be525cd6e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -54,6 +54,8 @@ members = [ "crates/deepseek", "crates/diagnostics", "crates/docs_preprocessor", + "crates/edit_prediction", + "crates/edit_prediction_button", "crates/editor", "crates/eval", "crates/explorer_command_injector", @@ -82,13 +84,12 @@ members = [ "crates/http_client_tls", "crates/icons", "crates/image_viewer", - "crates/edit_prediction", - "crates/edit_prediction_button", "crates/inspector_ui", "crates/install_cli", "crates/jj", "crates/jj_ui", "crates/journal", + "crates/keymap_editor", "crates/language", "crates/language_extension", "crates/language_model", @@ -157,9 +158,9 @@ members = [ "crates/streaming_diff", "crates/sum_tree", "crates/supermaven", - "crates/system_specs", "crates/supermaven_api", "crates/svg_preview", + "crates/system_specs", "crates/tab_switcher", "crates/task", "crates/tasks_ui", @@ -315,6 +316,7 @@ install_cli = { path = "crates/install_cli" } jj = { path = "crates/jj" } jj_ui = { path = "crates/jj_ui" } journal = { path = "crates/journal" } +keymap_editor = { path = "crates/keymap_editor" } language = { path = "crates/language" } language_extension = { path = "crates/language_extension" } language_model = { path = "crates/language_model" } diff --git a/crates/agent_servers/src/settings.rs b/crates/agent_servers/src/settings.rs index c89d2b54a6..916ff72baf 100644 --- a/crates/agent_servers/src/settings.rs +++ b/crates/agent_servers/src/settings.rs @@ -4,7 +4,7 @@ use collections::HashMap; use gpui::{App, SharedString}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; pub fn init(cx: &mut App) { AllAgentServersSettings::register(cx); diff --git a/crates/agent_settings/src/agent_settings.rs b/crates/agent_settings/src/agent_settings.rs index dc57d6ebf0..82be85be07 100644 --- a/crates/agent_settings/src/agent_settings.rs +++ b/crates/agent_settings/src/agent_settings.rs @@ -8,7 +8,7 @@ use gpui::{App, Pixels, SharedString}; use language_model::LanguageModel; use schemars::{JsonSchema, json_schema}; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; use std::borrow::Cow; pub use crate::agent_profile::*; diff --git a/crates/agent_ui/src/slash_command_settings.rs b/crates/agent_ui/src/slash_command_settings.rs index a81188b7f2..dbc4c9c27c 100644 --- a/crates/agent_ui/src/slash_command_settings.rs +++ b/crates/agent_ui/src/slash_command_settings.rs @@ -2,7 +2,7 @@ use anyhow::Result; use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; /// Settings for slash commands. #[derive(Deserialize, Serialize, Debug, Default, Clone, JsonSchema, SettingsUI)] diff --git a/crates/audio/src/audio_settings.rs b/crates/audio/src/audio_settings.rs index 9eb61d537f..bb5f975c3c 100644 --- a/crates/audio/src/audio_settings.rs +++ b/crates/audio/src/audio_settings.rs @@ -2,7 +2,7 @@ use anyhow::Result; use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; #[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug, SettingsUI)] pub struct AudioSettings { diff --git a/crates/auto_update/src/auto_update.rs b/crates/auto_update/src/auto_update.rs index b7824f1ae9..58522d3941 100644 --- a/crates/auto_update/src/auto_update.rs +++ b/crates/auto_update/src/auto_update.rs @@ -10,7 +10,7 @@ use paths::remote_servers_dir; use release_channel::{AppCommitSha, ReleaseChannel}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources, SettingsStore}; +use settings::{SettingsUI, Settings, SettingsSources, SettingsStore}; use smol::{fs, io::AsyncReadExt}; use smol::{fs::File, process::Command}; use std::{ diff --git a/crates/call/src/call_settings.rs b/crates/call/src/call_settings.rs index 4280134c6e..d3c867b199 100644 --- a/crates/call/src/call_settings.rs +++ b/crates/call/src/call_settings.rs @@ -2,7 +2,7 @@ use anyhow::Result; use gpui::App; use schemars::JsonSchema; use serde_derive::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; #[derive(Deserialize, Debug, SettingsUI)] pub struct CallSettings { diff --git a/crates/client/src/client.rs b/crates/client/src/client.rs index 4f3e7cfd4e..dc106382a0 100644 --- a/crates/client/src/client.rs +++ b/crates/client/src/client.rs @@ -31,7 +31,7 @@ use release_channel::{AppVersion, ReleaseChannel}; use rpc::proto::{AnyTypedEnvelope, EnvelopedMessage, PeerId, RequestMessage}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; use std::{ any::TypeId, convert::TryFrom, diff --git a/crates/collab_ui/src/panel_settings.rs b/crates/collab_ui/src/panel_settings.rs index 7952e950b3..92815dcf9f 100644 --- a/crates/collab_ui/src/panel_settings.rs +++ b/crates/collab_ui/src/panel_settings.rs @@ -1,7 +1,7 @@ use gpui::Pixels; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; use workspace::dock::DockPosition; #[derive(Deserialize, Debug, SettingsUI)] diff --git a/crates/dap/src/debugger_settings.rs b/crates/dap/src/debugger_settings.rs index ee7b7b47f6..bef7157eba 100644 --- a/crates/dap/src/debugger_settings.rs +++ b/crates/dap/src/debugger_settings.rs @@ -2,7 +2,7 @@ use dap_types::SteppingGranularity; use gpui::{App, Global}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[serde(rename_all = "snake_case")] diff --git a/crates/editor/src/editor_settings.rs b/crates/editor/src/editor_settings.rs index 4641dbe7fa..5e1675d23e 100644 --- a/crates/editor/src/editor_settings.rs +++ b/crates/editor/src/editor_settings.rs @@ -6,7 +6,7 @@ use language::CursorShape; use project::project_settings::DiagnosticSeverity; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources, VsCodeSettings}; +use settings::{SettingsUI, Settings, SettingsSources, VsCodeSettings}; use util::serde::default_true; /// Imports from the VSCode settings at diff --git a/crates/extension_host/src/extension_settings.rs b/crates/extension_host/src/extension_settings.rs index e6246311d1..51ac489ef7 100644 --- a/crates/extension_host/src/extension_settings.rs +++ b/crates/extension_host/src/extension_settings.rs @@ -3,7 +3,7 @@ use collections::HashMap; use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; use std::sync::Arc; #[derive(Deserialize, Serialize, Debug, Default, Clone, JsonSchema, SettingsUI)] diff --git a/crates/file_finder/src/file_finder_settings.rs b/crates/file_finder/src/file_finder_settings.rs index cb08c04156..6066397e52 100644 --- a/crates/file_finder/src/file_finder_settings.rs +++ b/crates/file_finder/src/file_finder_settings.rs @@ -1,7 +1,7 @@ use anyhow::Result; use schemars::JsonSchema; use serde_derive::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; #[derive(Deserialize, Debug, Clone, Copy, PartialEq, SettingsUI)] pub struct FileFinderSettings { diff --git a/crates/git_hosting_providers/src/settings.rs b/crates/git_hosting_providers/src/settings.rs index 64265f4d35..76fd386d5b 100644 --- a/crates/git_hosting_providers/src/settings.rs +++ b/crates/git_hosting_providers/src/settings.rs @@ -5,7 +5,7 @@ use git::GitHostingProviderRegistry; use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsStore}; +use settings::{SettingsUI, Settings, SettingsStore}; use url::Url; use util::ResultExt as _; diff --git a/crates/git_ui/src/git_panel_settings.rs b/crates/git_ui/src/git_panel_settings.rs index 0d8b852663..21f40f4a34 100644 --- a/crates/git_ui/src/git_panel_settings.rs +++ b/crates/git_ui/src/git_panel_settings.rs @@ -2,7 +2,7 @@ use editor::ShowScrollbar; use gpui::Pixels; use schemars::JsonSchema; use serde_derive::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; use workspace::dock::DockPosition; #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] diff --git a/crates/go_to_line/src/cursor_position.rs b/crates/go_to_line/src/cursor_position.rs index 4537dfe7cc..4913b4901f 100644 --- a/crates/go_to_line/src/cursor_position.rs +++ b/crates/go_to_line/src/cursor_position.rs @@ -2,7 +2,7 @@ use editor::{Editor, EditorSettings, MultiBufferSnapshot}; use gpui::{App, Entity, FocusHandle, Focusable, Subscription, Task, WeakEntity}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; use std::{fmt::Write, num::NonZeroU32, time::Duration}; use text::{Point, Selection}; use ui::{ diff --git a/crates/image_viewer/src/image_viewer_settings.rs b/crates/image_viewer/src/image_viewer_settings.rs index 1ce9971f9d..2adeb5d616 100644 --- a/crates/image_viewer/src/image_viewer_settings.rs +++ b/crates/image_viewer/src/image_viewer_settings.rs @@ -1,7 +1,7 @@ use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; /// The settings for the image viewer. #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Default, SettingsUI)] diff --git a/crates/journal/src/journal.rs b/crates/journal/src/journal.rs index 38545c3b7c..6d18b304b2 100644 --- a/crates/journal/src/journal.rs +++ b/crates/journal/src/journal.rs @@ -5,7 +5,7 @@ use editor::{Editor, SelectionEffects}; use gpui::{App, AppContext as _, Context, Window, actions}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; use std::{ fs::OpenOptions, path::{Path, PathBuf}, diff --git a/crates/keymap_editor/Cargo.toml b/crates/keymap_editor/Cargo.toml new file mode 100644 index 0000000000..03098d5506 --- /dev/null +++ b/crates/keymap_editor/Cargo.toml @@ -0,0 +1,55 @@ +[package] +name = "keymap_editor" +version = "0.1.0" +edition.workspace = true +publish.workspace = true +license = "GPL-3.0-or-later" + +[lints] +workspace = true + +[lib] +path = "src/keymap_editor.rs" + +[dependencies] +anyhow.workspace = true +collections.workspace = true +command_palette.workspace = true +command_palette_hooks.workspace = true +component.workspace = true +db.workspace = true +editor.workspace = true +feature_flags.workspace = true +fs.workspace = true +fuzzy.workspace = true +gpui.workspace = true +itertools.workspace = true +language.workspace = true +log.workspace = true +menu.workspace = true +notifications.workspace = true +paths.workspace = true +project.workspace = true +search.workspace = true +serde.workspace = true +serde_json.workspace = true +settings.workspace = true +telemetry.workspace = true +tempfile.workspace = true +theme.workspace = true +tree-sitter-json.workspace = true +tree-sitter-rust.workspace = true +ui.workspace = true +ui_input.workspace = true +util.workspace = true +vim.workspace = true +workspace-hack.workspace = true +workspace.workspace = true +zed_actions.workspace = true + +[dev-dependencies] +db = {"workspace"= true, "features" = ["test-support"]} +fs = { workspace = true, features = ["test-support"] } +gpui = { workspace = true, features = ["test-support"] } +project = { workspace = true, features = ["test-support"] } +workspace = { workspace = true, features = ["test-support"] } diff --git a/crates/keymap_editor/LICENSE-GPL b/crates/keymap_editor/LICENSE-GPL new file mode 120000 index 0000000000..89e542f750 --- /dev/null +++ b/crates/keymap_editor/LICENSE-GPL @@ -0,0 +1 @@ +../../LICENSE-GPL \ No newline at end of file diff --git a/crates/settings_ui/src/keybindings.rs b/crates/keymap_editor/src/keymap_editor.rs similarity index 99% rename from crates/settings_ui/src/keybindings.rs rename to crates/keymap_editor/src/keymap_editor.rs index 9c76725972..3c67610aeb 100644 --- a/crates/settings_ui/src/keybindings.rs +++ b/crates/keymap_editor/src/keymap_editor.rs @@ -1,3 +1,5 @@ +mod ui_components; + use std::{ cmp::{self}, ops::{Not as _, Range}, @@ -35,7 +37,7 @@ use workspace::{ }; use crate::{ - keybindings::persistence::KEYBINDING_EDITORS, + persistence::KEYBINDING_EDITORS, ui_components::{ keystroke_input::{ClearKeystrokes, KeystrokeInput, StartRecording, StopRecording}, table::{ColumnWidths, ResizeBehavior, Table, TableInteractionState}, diff --git a/crates/settings_ui/src/ui_components/keystroke_input.rs b/crates/keymap_editor/src/ui_components/keystroke_input.rs similarity index 100% rename from crates/settings_ui/src/ui_components/keystroke_input.rs rename to crates/keymap_editor/src/ui_components/keystroke_input.rs diff --git a/crates/settings_ui/src/ui_components/mod.rs b/crates/keymap_editor/src/ui_components/mod.rs similarity index 100% rename from crates/settings_ui/src/ui_components/mod.rs rename to crates/keymap_editor/src/ui_components/mod.rs diff --git a/crates/settings_ui/src/ui_components/table.rs b/crates/keymap_editor/src/ui_components/table.rs similarity index 100% rename from crates/settings_ui/src/ui_components/table.rs rename to crates/keymap_editor/src/ui_components/table.rs diff --git a/crates/language/src/language_settings.rs b/crates/language/src/language_settings.rs index ab4ee967b8..6e08ca49e1 100644 --- a/crates/language/src/language_settings.rs +++ b/crates/language/src/language_settings.rs @@ -17,8 +17,7 @@ use serde::{ }; use settings::{ - DeriveSettingsUI as SettingsUI, ParameterizedJsonSchema, Settings, SettingsLocation, - SettingsSources, SettingsStore, + ParameterizedJsonSchema, Settings, SettingsLocation, SettingsSources, SettingsStore, SettingsUI, }; use shellexpand; use std::{borrow::Cow, num::NonZeroU32, path::Path, slice, sync::Arc}; diff --git a/crates/language_models/src/settings.rs b/crates/language_models/src/settings.rs index 147d4bee5d..172fcf6446 100644 --- a/crates/language_models/src/settings.rs +++ b/crates/language_models/src/settings.rs @@ -5,7 +5,7 @@ use collections::HashMap; use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; use crate::provider::{ self, diff --git a/crates/outline_panel/src/outline_panel_settings.rs b/crates/outline_panel/src/outline_panel_settings.rs index b34946e643..9d46fac0c4 100644 --- a/crates/outline_panel/src/outline_panel_settings.rs +++ b/crates/outline_panel/src/outline_panel_settings.rs @@ -2,7 +2,7 @@ use editor::ShowScrollbar; use gpui::Pixels; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Copy, PartialEq)] #[serde(rename_all = "snake_case")] diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 9d34feb9e0..48e75c8095 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -948,7 +948,7 @@ pub enum PulledDiagnostics { /// Whether to disable all AI features in Zed. /// /// Default: false -#[derive(Copy, Clone, Debug, settings::DeriveSettingsUI)] +#[derive(Copy, Clone, Debug, settings::SettingsUI)] pub struct DisableAiSettings { pub disable_ai: bool, } diff --git a/crates/project/src/project_settings.rs b/crates/project/src/project_settings.rs index beab54cd2d..132c3cc5ab 100644 --- a/crates/project/src/project_settings.rs +++ b/crates/project/src/project_settings.rs @@ -18,7 +18,7 @@ use rpc::{ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use settings::{ - DeriveSettingsUI as SettingsUI, InvalidSettingsError, LocalSettingsKind, Settings, + SettingsUI, InvalidSettingsError, LocalSettingsKind, Settings, SettingsLocation, SettingsSources, SettingsStore, parse_json_with_comments, watch_config_file, }; use std::{ diff --git a/crates/project_panel/src/project_panel_settings.rs b/crates/project_panel/src/project_panel_settings.rs index a64fe41191..531136e699 100644 --- a/crates/project_panel/src/project_panel_settings.rs +++ b/crates/project_panel/src/project_panel_settings.rs @@ -2,7 +2,7 @@ use editor::ShowScrollbar; use gpui::Pixels; use schemars::JsonSchema; use serde_derive::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Copy, PartialEq)] #[serde(rename_all = "snake_case")] diff --git a/crates/recent_projects/src/ssh_connections.rs b/crates/recent_projects/src/ssh_connections.rs index fa82536f57..9544d1aae1 100644 --- a/crates/recent_projects/src/ssh_connections.rs +++ b/crates/recent_projects/src/ssh_connections.rs @@ -19,7 +19,7 @@ use remote::ssh_session::{ConnectionIdentifier, SshPortForwardOption}; use remote::{SshConnectionOptions, SshPlatform, SshRemoteClient}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; use theme::ThemeSettings; use ui::{ ActiveTheme, Color, Context, Icon, IconName, IconSize, InteractiveElement, IntoElement, Label, diff --git a/crates/repl/src/jupyter_settings.rs b/crates/repl/src/jupyter_settings.rs index 2d1ee7bd84..4dcb3bb603 100644 --- a/crates/repl/src/jupyter_settings.rs +++ b/crates/repl/src/jupyter_settings.rs @@ -4,7 +4,7 @@ use editor::EditorSettings; use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; #[derive(Debug, Default, SettingsUI)] pub struct JupyterSettings { diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index 7df274d23d..aa2af3ac99 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -5,6 +5,7 @@ mod keymap_file; mod settings_file; mod settings_json; mod settings_store; +mod settings_ui; mod vscode_import; use gpui::{App, Global}; @@ -23,10 +24,11 @@ pub use settings_file::*; pub use settings_json::*; pub use settings_store::{ InvalidSettingsError, LocalSettingsKind, Settings, SettingsLocation, SettingsSources, - SettingsStore, SettingsUI, + SettingsStore, }; +pub use settings_ui::*; // Re-export the derive macro -pub use settings_ui_macros::SettingsUI as DeriveSettingsUI; +pub use settings_ui_macros::SettingsUI; pub use vscode_import::{VsCodeSettings, VsCodeSettingsSource}; #[derive(Clone, Debug, PartialEq)] diff --git a/crates/settings/src/settings_store.rs b/crates/settings/src/settings_store.rs index 58da654b0e..fe921112b8 100644 --- a/crates/settings/src/settings_store.rs +++ b/crates/settings/src/settings_store.rs @@ -32,11 +32,9 @@ pub type EditorconfigProperties = ec4rs::Properties; use crate::{ ActiveSettingsProfileName, ParameterizedJsonSchema, SettingsJsonSchemaParams, VsCodeSettings, - WorktreeId, parse_json_with_comments, update_value_in_json_text, + WorktreeId, parse_json_with_comments, settings_ui::SettingsUI, update_value_in_json_text, }; -pub trait SettingsUI {} - /// A value that can be defined as a user setting. /// /// Settings can be loaded from a combination of multiple JSON files. diff --git a/crates/settings/src/settings_ui.rs b/crates/settings/src/settings_ui.rs new file mode 100644 index 0000000000..5150e41cf0 --- /dev/null +++ b/crates/settings/src/settings_ui.rs @@ -0,0 +1,72 @@ +use std::any::Any; + +use gpui::{AnyElement, App, Window}; + +pub trait SettingsUI { + fn ui_item() -> SettingsUIItem { + SettingsUIItem { + item: SettingsUIItemVariant::None, + } + } +} + +pub struct SettingsUIItem { + // TODO: + // path: SmallVec<[&'static str; 8]>, + pub item: SettingsUIItemVariant, +} + +pub enum SettingsUIItemVariant { + Group(SettingsUIItemGroup), + Item(SettingsUIItemSingle), + // TODO: remove + None, +} + +pub struct SettingsUIItemGroup { + pub items: Vec, +} + +pub enum SettingsUIItemSingle { + // TODO: default/builtin variants + Custom(Box AnyElement>), +} + +/* NOTES: + +# Root Group +some_setting: { + # First Item + # this shouldn't be a group + # it should just be item with path "some_bool.enabled" and title "Some Bool" + "some_bool": { + # this should + enabled: true | false + } + # Second Item + "some_other_thing": "foo" | "bar" | "baz" +} + +Structure: +Group { + path: "some_item", + items: [ + Item( + path: ["some_bool", "enabled"], + ), + Item( + path: ["some_other_thing"], + ) + ] +} + +is the following better than "foo.enabled"? +- for objects with single key "enabled", should just be a bool, with no "enabled" +for objects with enabled and other settings, enabled should be implicit, +so +"vim": false, # disabled +"vim": true, # enabled with default settings +"vim": { + "default_mode": "HelixNormal" +} # enabled with custom settings +*/ diff --git a/crates/settings_ui/Cargo.toml b/crates/settings_ui/Cargo.toml index 8a151359ec..9c3866e228 100644 --- a/crates/settings_ui/Cargo.toml +++ b/crates/settings_ui/Cargo.toml @@ -11,45 +11,24 @@ workspace = true [lib] path = "src/settings_ui.rs" +[features] +default = [] + [dependencies] anyhow.workspace = true -collections.workspace = true command_palette.workspace = true command_palette_hooks.workspace = true -component.workspace = true -db.workspace = true editor.workspace = true feature_flags.workspace = true -fs.workspace = true -fuzzy.workspace = true gpui.workspace = true -itertools.workspace = true -language.workspace = true -log.workspace = true -menu.workspace = true -notifications.workspace = true -paths.workspace = true -project.workspace = true -search.workspace = true -serde.workspace = true -serde_json.workspace = true -settings.workspace = true -telemetry.workspace = true -tempfile.workspace = true theme.workspace = true -tree-sitter-json.workspace = true -tree-sitter-rust.workspace = true +settings.workspace = true ui.workspace = true -ui_input.workspace = true util.workspace = true -vim.workspace = true -workspace-hack.workspace = true workspace.workspace = true -zed_actions.workspace = true -[dev-dependencies] -db = {"workspace"= true, "features" = ["test-support"]} -fs = { workspace = true, features = ["test-support"] } -gpui = { workspace = true, features = ["test-support"] } -project = { workspace = true, features = ["test-support"] } -workspace = { workspace = true, features = ["test-support"] } +# Uncomment other workspace dependencies as needed +# assistant.workspace = true +# client.workspace = true +# project.workspace = true +# settings.workspace = true diff --git a/crates/settings_ui/src/settings_ui.rs b/crates/settings_ui/src/settings_ui.rs index 3022cc7142..546f948d16 100644 --- a/crates/settings_ui/src/settings_ui.rs +++ b/crates/settings_ui/src/settings_ui.rs @@ -12,9 +12,6 @@ use workspace::{Workspace, with_active_or_new_workspace}; use crate::appearance_settings_controls::AppearanceSettingsControls; -pub mod keybindings; -pub mod ui_components; - pub struct SettingsUiFeatureFlag; impl FeatureFlag for SettingsUiFeatureFlag { @@ -76,7 +73,6 @@ pub fn init(cx: &mut App) { }) .detach(); - keybindings::init(cx); } pub struct SettingsPage { diff --git a/crates/terminal/src/terminal_settings.rs b/crates/terminal/src/terminal_settings.rs index b412c84088..7993fdef49 100644 --- a/crates/terminal/src/terminal_settings.rs +++ b/crates/terminal/src/terminal_settings.rs @@ -6,7 +6,7 @@ use gpui::{AbsoluteLength, App, FontFallbacks, FontFeatures, FontWeight, Pixels, use schemars::JsonSchema; use serde_derive::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, SettingsSources}; +use settings::{SettingsSources, SettingsUI}; use std::path::PathBuf; use task::Shell; use theme::FontFamilyName; diff --git a/crates/theme/src/settings.rs b/crates/theme/src/settings.rs index e54ee893db..339589f99e 100644 --- a/crates/theme/src/settings.rs +++ b/crates/theme/src/settings.rs @@ -13,9 +13,7 @@ use gpui::{ use refineable::Refineable; use schemars::{JsonSchema, json_schema}; use serde::{Deserialize, Serialize}; -use settings::{ - DeriveSettingsUI as SettingsUI, ParameterizedJsonSchema, Settings, SettingsSources, -}; +use settings::{ParameterizedJsonSchema, Settings, SettingsSources, SettingsUI}; use std::sync::Arc; use util::ResultExt as _; use util::schemars::replace_subschema; diff --git a/crates/title_bar/Cargo.toml b/crates/title_bar/Cargo.toml index cf178e2850..f60ac7c301 100644 --- a/crates/title_bar/Cargo.toml +++ b/crates/title_bar/Cargo.toml @@ -42,7 +42,7 @@ rpc.workspace = true schemars.workspace = true serde.workspace = true settings.workspace = true -settings_ui.workspace = true +keymap_editor.workspace = true smallvec.workspace = true story = { workspace = true, optional = true } telemetry.workspace = true diff --git a/crates/title_bar/src/title_bar.rs b/crates/title_bar/src/title_bar.rs index b84a2800b6..35e5feabfb 100644 --- a/crates/title_bar/src/title_bar.rs +++ b/crates/title_bar/src/title_bar.rs @@ -27,10 +27,10 @@ use gpui::{ IntoElement, MouseButton, ParentElement, Render, StatefulInteractiveElement, Styled, Subscription, WeakEntity, Window, actions, div, }; +use keymap_editor; use onboarding_banner::OnboardingBanner; use project::Project; use settings::Settings as _; -use settings_ui::keybindings; use std::sync::Arc; use theme::ActiveTheme; use title_bar_settings::TitleBarSettings; @@ -681,7 +681,7 @@ impl TitleBar { "Settings Profiles", zed_actions::settings_profile_selector::Toggle.boxed_clone(), ) - .action("Key Bindings", Box::new(keybindings::OpenKeymapEditor)) + .action("Key Bindings", Box::new(keymap_editor::OpenKeymapEditor)) .action( "Themes…", zed_actions::theme_selector::Toggle::default().boxed_clone(), @@ -729,7 +729,7 @@ impl TitleBar { "Settings Profiles", zed_actions::settings_profile_selector::Toggle.boxed_clone(), ) - .action("Key Bindings", Box::new(keybindings::OpenKeymapEditor)) + .action("Key Bindings", Box::new(keymap_editor::OpenKeymapEditor)) .action( "Themes…", zed_actions::theme_selector::Toggle::default().boxed_clone(), diff --git a/crates/title_bar/src/title_bar_settings.rs b/crates/title_bar/src/title_bar_settings.rs index e393ecdc9d..781900cea6 100644 --- a/crates/title_bar/src/title_bar_settings.rs +++ b/crates/title_bar/src/title_bar_settings.rs @@ -1,7 +1,7 @@ use db::anyhow; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; #[derive(Copy, Clone, Deserialize, Debug, SettingsUI)] pub struct TitleBarSettings { diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index fb5b5d36ff..e3ec2d414c 100644 --- a/crates/vim/src/vim.rs +++ b/crates/vim/src/vim.rs @@ -40,7 +40,7 @@ use schemars::JsonSchema; use serde::Deserialize; use serde_derive::Serialize; use settings::{ - DeriveSettingsUI as SettingsUI, Settings, SettingsSources, SettingsStore, update_settings_file, + SettingsUI, Settings, SettingsSources, SettingsStore, update_settings_file, }; use state::{Mode, Operator, RecordedSelection, SearchState, VimGlobals}; use std::{mem, ops::Range, sync::Arc}; diff --git a/crates/vim_mode_setting/src/vim_mode_setting.rs b/crates/vim_mode_setting/src/vim_mode_setting.rs index 3b25a56795..dd9f122161 100644 --- a/crates/vim_mode_setting/src/vim_mode_setting.rs +++ b/crates/vim_mode_setting/src/vim_mode_setting.rs @@ -6,7 +6,7 @@ use anyhow::Result; use gpui::App; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{Settings, SettingsSources, SettingsUI}; /// Initializes the `vim_mode_setting` crate. pub fn init(cx: &mut App) { diff --git a/crates/workspace/src/item.rs b/crates/workspace/src/item.rs index 7e52e95e68..18af720a74 100644 --- a/crates/workspace/src/item.rs +++ b/crates/workspace/src/item.rs @@ -17,7 +17,7 @@ use gpui::{ use project::{Project, ProjectEntryId, ProjectPath}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsLocation, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsLocation, SettingsSources}; use smallvec::SmallVec; use std::{ any::{Any, TypeId}, diff --git a/crates/workspace/src/workspace_settings.rs b/crates/workspace/src/workspace_settings.rs index 87d592ac54..b564ac23ad 100644 --- a/crates/workspace/src/workspace_settings.rs +++ b/crates/workspace/src/workspace_settings.rs @@ -6,7 +6,7 @@ use collections::HashMap; use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; #[derive(Deserialize, SettingsUI)] pub struct WorkspaceSettings { diff --git a/crates/worktree/src/worktree_settings.rs b/crates/worktree/src/worktree_settings.rs index 4f9f7af1d4..6110b13dc1 100644 --- a/crates/worktree/src/worktree_settings.rs +++ b/crates/worktree/src/worktree_settings.rs @@ -4,7 +4,7 @@ use anyhow::Context as _; use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsSources}; +use settings::{SettingsUI, Settings, SettingsSources}; use util::paths::PathMatcher; #[derive(Clone, PartialEq, Eq, SettingsUI)] diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index 6f4ead9ebb..62910089f2 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -131,6 +131,7 @@ serde_json.workspace = true session.workspace = true settings.workspace = true settings_ui.workspace = true +keymap_editor.workspace = true shellexpand.workspace = true smol.workspace = true snippet_provider.workspace = true diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index e99c8b564b..6f40b975b6 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -632,6 +632,7 @@ pub fn main() { svg_preview::init(cx); onboarding::init(cx); settings_ui::init(cx); + keymap_editor::init(cx); extensions_ui::init(cx); zeta::init(cx); inspector_ui::init(app_state.clone(), cx); diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 1b9657dcc6..f237a17d97 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -1482,7 +1482,7 @@ fn reload_keymaps(cx: &mut App, mut user_key_bindings: Vec) { workspace::NewWindow, )]); // todo: nicer api here? - settings_ui::keybindings::KeymapEventChannel::trigger_keymap_changed(cx); + keymap_editor::KeymapEventChannel::trigger_keymap_changed(cx); } pub fn load_default_keymap(cx: &mut App) { diff --git a/crates/zed/src/zed/app_menus.rs b/crates/zed/src/zed/app_menus.rs index 6c7ab0b374..342fd26cb7 100644 --- a/crates/zed/src/zed/app_menus.rs +++ b/crates/zed/src/zed/app_menus.rs @@ -1,6 +1,5 @@ use collab_ui::collab_panel; use gpui::{Menu, MenuItem, OsAction}; -use settings_ui::keybindings; use terminal_view::terminal_panel; pub fn app_menus() -> Vec { @@ -17,7 +16,7 @@ pub fn app_menus() -> Vec { name: "Settings".into(), items: vec![ MenuItem::action("Open Settings", super::OpenSettings), - MenuItem::action("Open Key Bindings", keybindings::OpenKeymapEditor), + MenuItem::action("Open Key Bindings", keymap_editor::OpenKeymapEditor), MenuItem::action("Open Default Settings", super::OpenDefaultSettings), MenuItem::action( "Open Default Key Bindings", diff --git a/crates/zlog_settings/src/zlog_settings.rs b/crates/zlog_settings/src/zlog_settings.rs index 5aad945b9b..b75ab29d8b 100644 --- a/crates/zlog_settings/src/zlog_settings.rs +++ b/crates/zlog_settings/src/zlog_settings.rs @@ -3,7 +3,7 @@ use anyhow::Result; use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{DeriveSettingsUI as SettingsUI, Settings, SettingsStore}; +use settings::{SettingsUI, Settings, SettingsStore}; pub fn init(cx: &mut App) { ZlogSettings::register(cx);