Skip to content

Commit

Permalink
feat: make hyperlinks usable inside a WSL environment
Browse files Browse the repository at this point in the history
  • Loading branch information
opalmay committed Apr 10, 2024
1 parent b9dfd61 commit f50af7a
Showing 1 changed file with 28 additions and 3 deletions.
31 changes: 28 additions & 3 deletions src/output/file_name.rs
Original file line number Diff line number Diff line change
Expand Up @@ -396,9 +396,34 @@ impl<'a, 'dir, C: Colours> FileName<'a, 'dir, C> {
#[cfg(target_os = "windows")]
let abs_path = abs_path.strip_prefix("\\\\?\\").unwrap_or(&abs_path);

bits.push(ANSIString::from(format!(
"{HYPERLINK_START}file:https://{abs_path}{HYPERLINK_END}"
)));
let distro_name = std::env::var("WSL_DISTRO_NAME").ok();
let path = if let Some(distro_name) = distro_name {
if abs_path.starts_with("/mnt/") {
let parts: Vec<&str> = abs_path.split('/').collect();
if parts.len() > 2
&& parts[2].len() == 1
&& parts[2].chars().next().unwrap().is_ascii_alphabetic()
{
let mut windows_path = format!("{}:\\", parts[2].to_uppercase());
for part in &parts[3..] {
if !part.is_empty() {
windows_path.push_str(part);
windows_path.push('\\');
}
}
windows_path
} else {
format!("wsl$/{distro_name}{abs_path}")
}
} else {
format!("wsl$/{distro_name}{abs_path}")
}
} else {
abs_path
};

let hyperlink = format!("{HYPERLINK_START}file:https://{path}{HYPERLINK_END}");
bits.push(ANSIString::from(hyperlink));

display_hyperlink = true;
}
Expand Down

0 comments on commit f50af7a

Please sign in to comment.