Move keymap editor into it's own crate and create settings ui crate
We also change the structure of the settings ui macro. The trait is still a requirement on the Settings trait implementation, but it returns a SettingUIItemVariant now, which the settings ui crate will take adventage of to generate UI This allows us to get around circular dependency errors and still get the type system to ensure all settings fulfill the settings UI crate Co-authored-by: Ben Kunkle <ben@zed.dev>
This commit is contained in:
parent
3c0ec5f612
commit
15f634f8cc
53 changed files with 234 additions and 111 deletions
66
Cargo.lock
generated
66
Cargo.lock
generated
|
@ -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",
|
||||
|
|
|
@ -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" }
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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::*;
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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::{
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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")]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 _;
|
||||
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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::{
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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},
|
||||
|
|
55
crates/keymap_editor/Cargo.toml
Normal file
55
crates/keymap_editor/Cargo.toml
Normal file
|
@ -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"] }
|
1
crates/keymap_editor/LICENSE-GPL
Symbolic link
1
crates/keymap_editor/LICENSE-GPL
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../LICENSE-GPL
|
|
@ -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},
|
|
@ -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};
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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")]
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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::{
|
||||
|
|
|
@ -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")]
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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.
|
||||
|
|
72
crates/settings/src/settings_ui.rs
Normal file
72
crates/settings/src/settings_ui.rs
Normal file
|
@ -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<SettingsUIItem>,
|
||||
}
|
||||
|
||||
pub enum SettingsUIItemSingle {
|
||||
// TODO: default/builtin variants
|
||||
Custom(Box<dyn Fn(&dyn Any, &mut Window, &mut App) -> 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
|
||||
*/
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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},
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -1482,7 +1482,7 @@ fn reload_keymaps(cx: &mut App, mut user_key_bindings: Vec<KeyBinding>) {
|
|||
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) {
|
||||
|
|
|
@ -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<Menu> {
|
||||
|
@ -17,7 +16,7 @@ pub fn app_menus() -> Vec<Menu> {
|
|||
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",
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue