diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json index a24c4aff69..332e3a7414 100644 --- a/assets/keymaps/vim.json +++ b/assets/keymaps/vim.json @@ -234,7 +234,8 @@ "escape": [ "vim::SwitchMode", "Normal" - ] + ], + "d": "editor::GoToDefinition" } }, { diff --git a/crates/feedback/src/feedback.rs b/crates/feedback/src/feedback.rs index f95f24f557..cd72cdf950 100644 --- a/crates/feedback/src/feedback.rs +++ b/crates/feedback/src/feedback.rs @@ -20,7 +20,12 @@ impl_actions!(zed, [OpenBrowser]); actions!( zed, - [CopySystemSpecsIntoClipboard, FileBugReport, RequestFeature] + [ + CopySystemSpecsIntoClipboard, + FileBugReport, + RequestFeature, + OpenZedCommunityRepo + ] ); pub fn init(app_state: Arc, cx: &mut MutableAppContext) { @@ -66,4 +71,11 @@ pub fn init(app_state: Arc, cx: &mut MutableAppContext) { }); }, ); + + cx.add_action( + |_: &mut Workspace, _: &OpenZedCommunityRepo, cx: &mut ViewContext| { + let url = "https://github.com/zed-industries/community"; + cx.dispatch_action(OpenBrowser { url: url.into() }); + }, + ); } diff --git a/crates/feedback/src/feedback_info_text.rs b/crates/feedback/src/feedback_info_text.rs index 6693a7cb44..8c31050109 100644 --- a/crates/feedback/src/feedback_info_text.rs +++ b/crates/feedback/src/feedback_info_text.rs @@ -1,10 +1,12 @@ use gpui::{ - elements::Label, Element, ElementBox, Entity, RenderContext, View, ViewContext, ViewHandle, + elements::{Flex, Label, MouseEventHandler, ParentElement, Text}, + CursorStyle, Element, ElementBox, Entity, MouseButton, RenderContext, View, ViewContext, + ViewHandle, }; use settings::Settings; use workspace::{item::ItemHandle, ToolbarItemLocation, ToolbarItemView}; -use crate::feedback_editor::FeedbackEditor; +use crate::{feedback_editor::FeedbackEditor, OpenZedCommunityRepo}; pub struct FeedbackInfoText { active_item: Option>, @@ -29,9 +31,44 @@ impl View for FeedbackInfoText { fn render(&mut self, cx: &mut RenderContext) -> ElementBox { let theme = cx.global::().theme.clone(); - let text = "We read whatever you submit here. For issues and discussions, visit the community repo on GitHub."; - Label::new(text, theme.feedback.info_text.text.clone()) - .contained() + + Flex::row() + .with_child( + Text::new( + "We read whatever you submit here. For issues and discussions, visit the ", + theme.feedback.info_text_default.text.clone(), + ) + .with_soft_wrap(false) + .aligned() + .boxed(), + ) + .with_child( + MouseEventHandler::::new(0, cx, |state, _| { + let contained_text = if state.hovered() { + &theme.feedback.link_text_hover + } else { + &theme.feedback.link_text_default + }; + + Label::new("community repo", contained_text.text.clone()) + .contained() + .aligned() + .left() + .clipped() + .boxed() + }) + .with_cursor_style(CursorStyle::PointingHand) + .on_click(MouseButton::Left, |_, cx| { + cx.dispatch_action(OpenZedCommunityRepo) + }) + .boxed(), + ) + .with_child( + Text::new(" on GitHub.", theme.feedback.info_text_default.text.clone()) + .with_soft_wrap(false) + .aligned() + .boxed(), + ) .aligned() .left() .clipped() diff --git a/crates/fuzzy/src/paths.rs b/crates/fuzzy/src/paths.rs index 2c5ce81b1c..1cb7174fcc 100644 --- a/crates/fuzzy/src/paths.rs +++ b/crates/fuzzy/src/paths.rs @@ -198,6 +198,23 @@ fn distance_between_paths(path: &Path, relative_to: &Path) -> usize { let mut path_components = path.components(); let mut relative_components = relative_to.components(); - while path_components.next() == relative_components.next() {} + while path_components + .next() + .zip(relative_components.next()) + .map(|(path_component, relative_component)| path_component == relative_component) + .unwrap_or_default() + {} path_components.count() + relative_components.count() + 1 } + +#[cfg(test)] +mod tests { + use std::path::Path; + + use super::distance_between_paths; + + #[test] + fn test_distance_between_paths_empty() { + distance_between_paths(Path::new(""), Path::new("")); + } +} diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index 4e10b81447..efe64cbc5c 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -821,7 +821,9 @@ pub struct TerminalStyle { pub struct FeedbackStyle { pub submit_button: Interactive, pub button_margin: f32, - pub info_text: ContainedText, + pub info_text_default: ContainedText, + pub link_text_default: ContainedText, + pub link_text_hover: ContainedText, } #[derive(Clone, Deserialize, Default)] diff --git a/crates/zed/resources/app-icon-preview.png b/crates/zed/resources/app-icon-preview.png index 2d6ade1dd3..ce2a639e2c 100644 Binary files a/crates/zed/resources/app-icon-preview.png and b/crates/zed/resources/app-icon-preview.png differ diff --git a/crates/zed/resources/app-icon-preview@2x.png b/crates/zed/resources/app-icon-preview@2x.png index 0a55727e41..f22b8523f9 100644 Binary files a/crates/zed/resources/app-icon-preview@2x.png and b/crates/zed/resources/app-icon-preview@2x.png differ diff --git a/crates/zed/resources/app-icon.png b/crates/zed/resources/app-icon.png index 6c8a1b6bd4..08b6d8afa0 100644 Binary files a/crates/zed/resources/app-icon.png and b/crates/zed/resources/app-icon.png differ diff --git a/crates/zed/resources/app-icon@2x.png b/crates/zed/resources/app-icon@2x.png index 3509df92ca..5bb5754bc1 100644 Binary files a/crates/zed/resources/app-icon@2x.png and b/crates/zed/resources/app-icon@2x.png differ diff --git a/styles/src/styleTree/feedback.ts b/styles/src/styleTree/feedback.ts index 9d09058842..d794674439 100644 --- a/styles/src/styleTree/feedback.ts +++ b/styles/src/styleTree/feedback.ts @@ -31,6 +31,8 @@ export default function feedback(colorScheme: ColorScheme) { }, }, button_margin: 8, - info_text: text(layer, "sans", "default", { size: "xs" }), + info_text_default: text(layer, "sans", "default", { size: "xs" }), + link_text_default: text(layer, "sans", "default", { size: "xs", underline: true }), + link_text_hover: text(layer, "sans", "hovered", { size: "xs", underline: true }) } }