From 4338ff6be496edcdd86d5b97284f3a5ba9e140c2 Mon Sep 17 00:00:00 2001 From: Casey Watson Date: Thu, 19 Sep 2024 07:01:28 -0600 Subject: [PATCH] terminal: Add ability to open file from Git diff (#17446) - strip "a/" and "b/" prefix for potential paths. Release Notes: - Allow clicking on filepaths when using `git diff` inside the built-in terminal --- crates/terminal_view/src/terminal_view.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index f19bfa7010..e0b92035d1 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -58,6 +58,8 @@ const REGEX_SPECIAL_CHARS: &[char] = &[ const CURSOR_BLINK_INTERVAL: Duration = Duration::from_millis(500); +const GIT_DIFF_PATH_PREFIXES: &[char] = &['a', 'b']; + ///Event to transmit the scroll from the element to the view #[derive(Clone, Debug, PartialEq)] pub struct ScrollTerminal(pub i32); @@ -826,6 +828,19 @@ fn possible_open_targets( { potential_cwd_and_workspace_paths.insert(potential_worktree_path); } + + for prefix in GIT_DIFF_PATH_PREFIXES { + let prefix_str = &prefix.to_string(); + if maybe_path.starts_with(prefix_str) { + let stripped = maybe_path.strip_prefix(prefix_str).unwrap_or(&maybe_path); + for potential_worktree_path in workspace + .worktrees(cx) + .map(|worktree| worktree.read(cx).abs_path().join(&stripped)) + { + potential_cwd_and_workspace_paths.insert(potential_worktree_path); + } + } + } }); }