diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index 7b059652fa..b40a076c49 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -425,5 +425,12 @@ "cmd-v": "terminal::Paste", "cmd-k": "terminal::Clear" } + }, + { + "context": "ModalTerminal", + "bindings": { + "ctrl-cmd-space": "terminal::ShowCharacterPalette", + "shift-escape": "terminal::DeployModal" + } } ] \ No newline at end of file diff --git a/crates/settings/src/keymap_file.rs b/crates/settings/src/keymap_file.rs index e588239210..c1d5db32bb 100644 --- a/crates/settings/src/keymap_file.rs +++ b/crates/settings/src/keymap_file.rs @@ -10,7 +10,6 @@ use schemars::{ }; use serde::Deserialize; use serde_json::{value::RawValue, Value}; -use util::ResultExt; #[derive(Deserialize, Default, Clone, JsonSchema)] #[serde(transparent)] @@ -57,27 +56,26 @@ impl KeymapFileContent { for KeymapBlock { context, bindings } in self.0 { let bindings = bindings .into_iter() - .filter_map(|(keystroke, action)| { + .map(|(keystroke, action)| { let action = action.0.get(); // This is a workaround for a limitation in serde: serde-rs/json#497 // We want to deserialize the action data as a `RawValue` so that we can // deserialize the action itself dynamically directly from the JSON // string. But `RawValue` currently does not work inside of an untagged enum. - if action.starts_with('[') { - let ActionWithData(name, data) = serde_json::from_str(action).log_err()?; + let action = if action.starts_with('[') { + let ActionWithData(name, data) = serde_json::from_str(action)?; cx.deserialize_action(&name, Some(data.get())) } else { - let name = serde_json::from_str(action).log_err()?; + let name = serde_json::from_str(action)?; cx.deserialize_action(name, None) } .with_context(|| { format!( "invalid binding value for keystroke {keystroke}, context {context:?}" ) - }) - .log_err() - .map(|action| Binding::load(&keystroke, action, context.as_deref())) + })?; + Binding::load(&keystroke, action, context.as_deref()) }) .collect::>>()?; diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index ad904f034a..2b97cb0b10 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -20,7 +20,6 @@ pub use keymap_file::{keymap_file_json_schema, KeymapFileContent}; #[derive(Clone)] pub struct Settings { - pub experiments: FeatureFlags, pub projects_online_by_default: bool, pub buffer_font_family: FamilyId, pub default_buffer_font_size: f32, @@ -39,11 +38,6 @@ pub struct Settings { pub theme: Arc, } -#[derive(Copy, Clone, Debug, Default, Deserialize, JsonSchema)] -pub struct FeatureFlags { - pub modal_terminal: bool, -} - #[derive(Clone, Debug, Default, Deserialize, JsonSchema)] pub struct EditorSettings { pub tab_size: Option, @@ -145,8 +139,6 @@ pub enum WorkingDirectory { #[derive(Clone, Debug, Default, Deserialize, JsonSchema)] pub struct SettingsFileContent { - #[serde(default)] - pub experiments: Option, #[serde(default)] pub projects_online_by_default: Option, #[serde(default)] @@ -197,7 +189,6 @@ impl Settings { .unwrap(); Self { - experiments: FeatureFlags::default(), buffer_font_family: font_cache .load_family(&[defaults.buffer_font_family.as_ref().unwrap()]) .unwrap(), @@ -256,7 +247,7 @@ impl Settings { ); merge(&mut self.vim_mode, data.vim_mode); merge(&mut self.autosave, data.autosave); - merge(&mut self.experiments, data.experiments); + // Ensure terminal font is loaded, so we can request it in terminal_element layout if let Some(terminal_font) = &data.terminal.font_family { font_cache.load_family(&[terminal_font]).log_err(); @@ -317,7 +308,6 @@ impl Settings { #[cfg(any(test, feature = "test-support"))] pub fn test(cx: &gpui::AppContext) -> Settings { Settings { - experiments: FeatureFlags::default(), buffer_font_family: cx.font_cache().load_family(&["Monaco"]).unwrap(), buffer_font_size: 14., default_buffer_font_size: 14., diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index 668af56145..25e952d591 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -46,10 +46,7 @@ use crate::mappings::{ ///Initialize and register all of our action handlers pub fn init(cx: &mut MutableAppContext) { - let settings = cx.global::(); - if settings.experiments.modal_terminal { - cx.add_action(deploy_modal); - } + cx.add_action(deploy_modal); terminal_view::init(cx); connected_view::init(cx); diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index 2f8bc73c9f..aa2f0b7ada 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -95,12 +95,6 @@ fn main() { .spawn(languages::init(languages.clone(), cx.background().clone())); let user_store = cx.add_model(|cx| UserStore::new(client.clone(), http.clone(), cx)); - let (settings_file, keymap_file) = cx.background().block(config_files).unwrap(); - - //Make sure to load settings before initialization, so we know what features to toggle - watch_settings_file(default_settings, settings_file, themes.clone(), cx); - watch_keymap_file(keymap_file, cx); - context_menu::init(cx); project::Project::init(&client); client::Channel::init(&client); @@ -120,7 +114,10 @@ fn main() { terminal::init(cx); let db = cx.background().block(db); + let (settings_file, keymap_file) = cx.background().block(config_files).unwrap(); + watch_settings_file(default_settings, settings_file, themes.clone(), cx); + watch_keymap_file(keymap_file, cx); cx.spawn(|cx| watch_themes(fs.clone(), themes.clone(), cx)) .detach();