diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index c414216f858f06a4e44e7438476a0c0b120c1960..3c1d655551c750fed29d5b5cb0a30e975ea2d5c7 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -5,7 +5,10 @@ use crate::{ TransformBlock, }, editor_settings::{DoubleClickInMultibuffer, MultiCursorModifier, ShowScrollbar}, - git::{blame::GitBlame, diff_hunk_to_display, DisplayDiffHunk}, + git::{ + blame::{CommitDetails, GitBlame}, + diff_hunk_to_display, DisplayDiffHunk, + }, hover_popover::{ self, hover_at, HOVER_POPOVER_GAP, MIN_POPOVER_CHARACTER_WIDTH, MIN_POPOVER_LINE_HEIGHT, }, @@ -3431,8 +3434,15 @@ fn render_blame_entry( ]) .on_mouse_down(MouseButton::Right, { let blame_entry = blame_entry.clone(); + let details = details.clone(); move |event, cx| { - deploy_blame_entry_context_menu(&blame_entry, editor.clone(), event.position, cx); + deploy_blame_entry_context_menu( + &blame_entry, + details.as_ref(), + editor.clone(), + event.position, + cx, + ); } }) .hover(|style| style.bg(cx.theme().colors().element_hover)) @@ -3452,6 +3462,7 @@ fn render_blame_entry( fn deploy_blame_entry_context_menu( blame_entry: &BlameEntry, + details: Option<&CommitDetails>, editor: View, position: gpui::Point, cx: &mut WindowContext<'_>, @@ -3461,6 +3472,10 @@ fn deploy_blame_entry_context_menu( this.entry("Copy commit SHA", None, move |cx| { cx.write_to_clipboard(ClipboardItem::new(sha.clone())); }) + .when_some( + details.and_then(|details| details.permalink.clone()), + |this, url| this.entry("Open permalink", None, move |cx| cx.open_url(url.as_str())), + ) }); editor.update(cx, move |editor, cx| {