diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index 1049e216f3d6452641da021f23e6b7efc9084e43..831c076b5c5c36c89dc0e03a37b77b2171e39590 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -20,6 +20,7 @@ "cmd-shift-S": "workspace::SaveAs", "cmd-=": "zed::IncreaseBufferFontSize", "cmd--": "zed::DecreaseBufferFontSize", + "cmd-0": "zed::ResetBufferFontSize", "cmd-,": "zed::OpenSettings", "cmd-q": "zed::Quit", "cmd-n": "workspace::NewFile", diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index 9b5ed124412d697166b52217488b0f67e6263bf4..58c70d32c1dcebc37cee699f31f1b45f5fd6351a 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -21,6 +21,7 @@ pub use keymap_file::{keymap_file_json_schema, KeymapFileContent}; pub struct Settings { pub buffer_font_family: FamilyId, pub buffer_font_size: f32, + pub default_buffer_font_size: f32, pub vim_mode: bool, pub tab_size: u32, pub soft_wrap: SoftWrap, @@ -73,6 +74,7 @@ impl Settings { Ok(Self { buffer_font_family: font_cache.load_family(&[buffer_font_family])?, buffer_font_size: 15., + default_buffer_font_size: 15., vim_mode: false, tab_size: 4, soft_wrap: SoftWrap::None, @@ -126,6 +128,7 @@ impl Settings { Settings { buffer_font_family: cx.font_cache().load_family(&["Monaco"]).unwrap(), buffer_font_size: 14., + default_buffer_font_size: 14., vim_mode: false, tab_size: 4, soft_wrap: SoftWrap::None, @@ -162,6 +165,7 @@ impl Settings { } merge(&mut self.buffer_font_size, data.buffer_font_size); + merge(&mut self.default_buffer_font_size, data.buffer_font_size); merge(&mut self.vim_mode, data.vim_mode); merge(&mut self.format_on_save, data.format_on_save); merge(&mut self.soft_wrap, data.editor.soft_wrap); diff --git a/crates/zed/src/menus.rs b/crates/zed/src/menus.rs index e90b716d02af56883167de353375ec29c57ffcdb..cc5f128bc014462e77400f7a3ade0c0f1e0503ad 100644 --- a/crates/zed/src/menus.rs +++ b/crates/zed/src/menus.rs @@ -15,6 +15,14 @@ pub fn menus() -> Vec> { action: Box::new(auto_update::Check), }, MenuItem::Separator, + MenuItem::Action { + name: "Open Settings", + action: Box::new(super::OpenSettings), + }, + MenuItem::Action { + name: "Open Key Bindings", + action: Box::new(super::OpenKeymap), + }, MenuItem::Action { name: "Install CLI", action: Box::new(super::InstallCommandLineInterface), @@ -164,6 +172,10 @@ pub fn menus() -> Vec> { name: "Zoom Out", action: Box::new(super::DecreaseBufferFontSize), }, + MenuItem::Action { + name: "Reset Zoom", + action: Box::new(super::ResetBufferFontSize), + }, MenuItem::Separator, MenuItem::Action { name: "Project Browser", @@ -235,10 +247,25 @@ pub fn menus() -> Vec> { }, Menu { name: "Help", - items: vec![MenuItem::Action { - name: "Command Palette", - action: Box::new(command_palette::Toggle), - }], + items: vec![ + MenuItem::Action { + name: "Command Palette", + action: Box::new(command_palette::Toggle), + }, + MenuItem::Separator, + MenuItem::Action { + name: "Zed.dev", + action: Box::new(crate::OpenBrowser { + url: "https://zed.dev".into(), + }), + }, + MenuItem::Action { + name: "Zed Twitter", + action: Box::new(crate::OpenBrowser { + url: "https://twitter.com/zeddotdev".into(), + }), + }, + ], }, ] } diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index c2f6c60ea673a48b90e1d38c65648ca489615d86..6ebe3dc35de65855b4efe58fc06000dbfc73bf1c 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -14,6 +14,7 @@ use editor::Editor; use gpui::{ actions, geometry::vector::vec2f, + impl_actions, platform::{WindowBounds, WindowOptions}, AsyncAppContext, ViewContext, }; @@ -23,6 +24,7 @@ use project::Project; pub use project::{self, fs}; use project_panel::ProjectPanel; use search::{BufferSearchBar, ProjectSearchBar}; +use serde::Deserialize; use serde_json::to_string_pretty; use settings::{keymap_file_json_schema, settings_file_json_schema, Settings}; use std::{ @@ -33,6 +35,13 @@ use util::ResultExt; pub use workspace; use workspace::{AppState, Workspace}; +#[derive(Deserialize, Clone)] +struct OpenBrowser { + url: Arc, +} + +impl_actions!(zed, [OpenBrowser]); + actions!( zed, [ @@ -43,6 +52,7 @@ actions!( OpenKeymap, IncreaseBufferFontSize, DecreaseBufferFontSize, + ResetBufferFontSize, InstallCommandLineInterface, ] ); @@ -60,6 +70,7 @@ lazy_static! { pub fn init(app_state: &Arc, cx: &mut gpui::MutableAppContext) { cx.add_action(about); cx.add_global_action(quit); + cx.add_global_action(move |action: &OpenBrowser, cx| cx.platform().open_url(&action.url)); cx.add_global_action(move |_: &IncreaseBufferFontSize, cx| { cx.update_global::(|settings, cx| { settings.buffer_font_size = (settings.buffer_font_size + 1.0).max(MIN_FONT_SIZE); @@ -72,6 +83,12 @@ pub fn init(app_state: &Arc, cx: &mut gpui::MutableAppContext) { cx.refresh_windows(); }); }); + cx.add_global_action(move |_: &ResetBufferFontSize, cx| { + cx.update_global::(|settings, cx| { + settings.buffer_font_size = settings.default_buffer_font_size; + cx.refresh_windows(); + }); + }); cx.add_global_action(move |_: &InstallCommandLineInterface, cx| { cx.spawn(|cx| async move { install_cli(&cx).await.context("error creating CLI symlink") }) .detach_and_log_err(cx);