Pre-populate settings.json when initializing it from Zed

This commit is contained in:
Max Brunsfeld 2022-07-12 14:19:32 -07:00
parent 7750054a45
commit 0ebf417c2e
4 changed files with 26 additions and 5 deletions

View file

@ -0,0 +1,8 @@
// Zed settings
//
// For information on how to configure Zed, see the Zed
// documentation: https://zed.dev/docs/configuring-zed
//
// To see all of Zed's default settings without changing your
// custom settings, run the `open default settings` command
// from the command palette or from `Zed` application menu.

View file

@ -107,7 +107,7 @@ impl Settings {
} }
let defaults: SettingsFileContent = parse_json_with_comments( let defaults: SettingsFileContent = parse_json_with_comments(
str::from_utf8(assets.load("default-settings.json").unwrap().as_ref()).unwrap(), str::from_utf8(assets.load("settings/default.json").unwrap().as_ref()).unwrap(),
) )
.unwrap(); .unwrap();

View file

@ -18,8 +18,9 @@ use gpui::{
geometry::vector::vec2f, geometry::vector::vec2f,
impl_actions, impl_actions,
platform::{WindowBounds, WindowOptions}, platform::{WindowBounds, WindowOptions},
AsyncAppContext, ViewContext, AssetSource, AsyncAppContext, ViewContext,
}; };
use language::Rope;
use lazy_static::lazy_static; use lazy_static::lazy_static;
pub use lsp; pub use lsp;
pub use project::{self, fs}; pub use project::{self, fs};
@ -100,13 +101,22 @@ pub fn init(app_state: &Arc<AppState>, cx: &mut gpui::MutableAppContext) {
cx.add_action({ cx.add_action({
let app_state = app_state.clone(); let app_state = app_state.clone();
move |_: &mut Workspace, _: &OpenSettings, cx: &mut ViewContext<Workspace>| { move |_: &mut Workspace, _: &OpenSettings, cx: &mut ViewContext<Workspace>| {
open_config_file(&SETTINGS_PATH, app_state.clone(), cx); open_config_file(&SETTINGS_PATH, app_state.clone(), cx, || {
let header = Assets.load("settings/header-comments.json").unwrap();
let json = Assets.load("settings/default.json").unwrap();
let header = str::from_utf8(header.as_ref()).unwrap();
let json = str::from_utf8(json.as_ref()).unwrap();
let mut content = Rope::new();
content.push(header);
content.push(json);
content
});
} }
}); });
cx.add_action({ cx.add_action({
let app_state = app_state.clone(); let app_state = app_state.clone();
move |_: &mut Workspace, _: &OpenKeymap, cx: &mut ViewContext<Workspace>| { move |_: &mut Workspace, _: &OpenKeymap, cx: &mut ViewContext<Workspace>| {
open_config_file(&KEYMAP_PATH, app_state.clone(), cx); open_config_file(&KEYMAP_PATH, app_state.clone(), cx, || Default::default());
} }
}); });
cx.add_action({ cx.add_action({
@ -129,7 +139,7 @@ pub fn init(app_state: &Arc<AppState>, cx: &mut gpui::MutableAppContext) {
open_bundled_config_file( open_bundled_config_file(
workspace, workspace,
app_state.clone(), app_state.clone(),
"default-settings.json", "settings/default.json",
"Default Settings", "Default Settings",
cx, cx,
); );
@ -367,12 +377,15 @@ fn open_config_file(
path: &'static Path, path: &'static Path,
app_state: Arc<AppState>, app_state: Arc<AppState>,
cx: &mut ViewContext<Workspace>, cx: &mut ViewContext<Workspace>,
default_content: impl 'static + Send + FnOnce() -> Rope,
) { ) {
cx.spawn(|workspace, mut cx| async move { cx.spawn(|workspace, mut cx| async move {
let fs = &app_state.fs; let fs = &app_state.fs;
if !fs.is_file(path).await { if !fs.is_file(path).await {
fs.create_dir(&ROOT_PATH).await?; fs.create_dir(&ROOT_PATH).await?;
fs.create_file(path, Default::default()).await?; fs.create_file(path, Default::default()).await?;
fs.save(path, &default_content(), Default::default())
.await?;
} }
workspace workspace