diff --git a/src/term.rs b/src/term.rs index 1e08c84f..2f461397 100644 --- a/src/term.rs +++ b/src/term.rs @@ -247,12 +247,16 @@ pub fn terminal_file_link<'a>( canonical_path: &str, color: Color, ) -> io::Result<()> { + let encoded_spaces_canonical_path = encode_spaces(canonical_path); + writer .stdout() .queue(SetForegroundColor(color))? .queue(SetAttribute(Attribute::Underlined))?; writer.stdout().write_all(b"\x1b]8;;file://")?; - writer.stdout().write_all(canonical_path.as_bytes())?; + writer + .stdout() + .write_all(encoded_spaces_canonical_path.as_bytes())?; writer.stdout().write_all(b"\x1b\\")?; // Only this part is visible. writer.write_str(path)?; @@ -265,6 +269,10 @@ pub fn terminal_file_link<'a>( Ok(()) } +fn encode_spaces(path: &str) -> String { + path.replace(" ", "%20") +} + pub fn write_ansi(output: &mut Vec<u8>, command: impl Command) { struct FmtWriter<'a>(&'a mut Vec<u8>);