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;
|
||||
|
||||
pub fn expand_path(p: impl AsRef<Path>) -> PathBuf {
|
||||
let p = p.as_ref().to_string_lossy();
|
||||
|
||||
// ${HOME} or $HOME
|
||||
#[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)]
|
||||
let re = regex::Regex::new(r"%([^%]+)%").unwrap();
|
||||
|
||||
let expanded = re.replace_all(&p, |caps: ®ex::Captures| {
|
||||
env::var(caps.get(1).unwrap().as_str())
|
||||
.unwrap_or_else(|_| caps.get(0).unwrap().as_str().to_string())
|
||||
let s = p.as_ref().to_string_lossy();
|
||||
let s = re.replace_all(&s, |caps: ®ex::Captures| {
|
||||
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("~") {
|
||||
#[cfg(unix)]
|
||||
if let Some(home) = env::var_os("HOME") {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue