mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
..
This commit is contained in:
parent
e182edbf96
commit
cd1787c1cf
1 changed files with 9 additions and 7 deletions
|
|
@ -5,19 +5,21 @@ use tokio::fs;
|
||||||
use crate::Url;
|
use crate::Url;
|
||||||
|
|
||||||
pub fn expand_path(p: impl AsRef<Path>) -> PathBuf {
|
pub fn expand_path(p: impl AsRef<Path>) -> PathBuf {
|
||||||
let p = p.as_ref().to_string_lossy();
|
// ${HOME} or $HOME
|
||||||
|
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
let re = regex::Regex::new(r"\$([a-zA-Z0-9_]+)").unwrap();
|
let re = regex::Regex::new(r"\$(?:\{([^}]+)\}|([a-zA-Z\d_]+))").unwrap();
|
||||||
|
|
||||||
|
// %USERPROFILE%
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
let re = regex::Regex::new(r"%([^%]+)%").unwrap();
|
let re = regex::Regex::new(r"%([^%]+)%").unwrap();
|
||||||
|
|
||||||
let expanded = re.replace_all(&p, |caps: ®ex::Captures| {
|
let s = p.as_ref().to_string_lossy();
|
||||||
env::var(caps.get(1).unwrap().as_str())
|
let s = re.replace_all(&s, |caps: ®ex::Captures| {
|
||||||
.unwrap_or_else(|_| caps.get(0).unwrap().as_str().to_string())
|
let name = caps.get(2).or_else(|| caps.get(1)).unwrap();
|
||||||
|
env::var(name.as_str()).unwrap_or_else(|_| caps.get(0).unwrap().as_str().to_owned())
|
||||||
});
|
});
|
||||||
|
|
||||||
let p = Path::new(expanded.as_ref());
|
let p = Path::new(s.as_ref());
|
||||||
if let Ok(p) = p.strip_prefix("~") {
|
if let Ok(p) = p.strip_prefix("~") {
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
if let Some(home) = env::var_os("HOME") {
|
if let Some(home) = env::var_os("HOME") {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue