From aeb9cd4b8baf80cb19a2de31c634437c847ea236 Mon Sep 17 00:00:00 2001 From: zjp Date: Sat, 13 May 2023 22:44:13 +0800 Subject: [PATCH] Fix preview: handle Windows NT UNC paths (`\\?\C:\foo`) --- Cargo.lock | 7 +++++++ Cargo.toml | 3 +++ src/common/fs.rs | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index ac4c0ef..a379f1b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -244,6 +244,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + [[package]] name = "edit" version = "0.1.4" @@ -455,6 +461,7 @@ dependencies = [ "crossterm", "dns_common", "dns_common_derive", + "dunce", "edit", "etcetera", "lazy_static", diff --git a/Cargo.toml b/Cargo.toml index a9dc3d1..fa054cc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,9 @@ dns_common_derive = { version = "0.2.1" } dns_common = { version = "0.2.1", default-features = false, features = ["yaml", "json"] } unicode-width = "0.1.10" +[target.'cfg(windows)'.dependencies] +dunce = "1" + [lib] name = "navi" path = "src/lib.rs" diff --git a/src/common/fs.rs b/src/common/fs.rs index 32c8b1e..cf8a737 100644 --- a/src/common/fs.rs +++ b/src/common/fs.rs @@ -78,6 +78,11 @@ fn follow_symlink(pathbuf: PathBuf) -> Result { fn exe_pathbuf() -> Result { let pathbuf = std::env::current_exe().context("Unable to acquire executable's path")?; + + #[cfg(target_family = "windows")] + let pathbuf = dunce::canonicalize(pathbuf)?; + + debug!(current_exe = ?pathbuf); follow_symlink(pathbuf) }