diff options
-rw-r--r-- | helix-term/src/commands.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 7403f5b2..cc2c2cca 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -2497,6 +2497,8 @@ fn goto_impl( align_view(doc, view, Align::Center); } + let cwdir = std::env::current_dir().expect("couldn't determine current directory"); + match locations.as_slice() { [location] => { jump_to(editor, location, offset_encoding, Action::Replace); @@ -2507,8 +2509,23 @@ fn goto_impl( _locations => { let picker = ui::Picker::new( locations, - |location| { - let file = location.uri.as_str(); + move |location| { + let file: Cow<'_, str> = (location.uri.scheme() == "file") + .then(|| { + location + .uri + .to_file_path() + .map(|path| { + // strip root prefix + path.strip_prefix(&cwdir) + .map(|path| path.to_path_buf()) + .unwrap_or(path) + }) + .ok() + .and_then(|path| path.to_str().map(|path| path.to_owned().into())) + }) + .flatten() + .unwrap_or_else(|| location.uri.as_str().into()); let line = location.range.start.line; format!("{}:{}", file, line).into() }, |