mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-24 08:11:04 +00:00
feat: new YAZI_CONFIG_HOME env variable (#97)
This commit is contained in:
parent
c0c1a6cae6
commit
018ba56f62
6 changed files with 16 additions and 13 deletions
|
|
@ -121,7 +121,7 @@ impl App {
|
|||
match event {
|
||||
Event::Cd(path) => {
|
||||
futures::executor::block_on(async {
|
||||
manager.active_mut().cd(absolute_path(path).await).await;
|
||||
manager.active_mut().cd(absolute_path(path)).await;
|
||||
});
|
||||
}
|
||||
Event::Refresh => {
|
||||
|
|
|
|||
|
|
@ -38,11 +38,8 @@ impl Default for Boot {
|
|||
fn default() -> Self {
|
||||
let args = Args::parse();
|
||||
|
||||
let cwd = args
|
||||
.cwd
|
||||
.map(|p| futures::executor::block_on(absolute_path(p)))
|
||||
.filter(|p| p.is_dir())
|
||||
.or_else(|| env::current_dir().ok());
|
||||
let cwd =
|
||||
args.cwd.map(absolute_path).filter(|p| p.is_dir()).or_else(|| env::current_dir().ok());
|
||||
|
||||
let boot = Self {
|
||||
cwd: cwd.unwrap_or("/".into()),
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ use std::{path::{Path, PathBuf}, time::{self, SystemTime}};
|
|||
|
||||
use md5::{Digest, Md5};
|
||||
use serde::Deserialize;
|
||||
use shared::absolute_path;
|
||||
|
||||
use super::PreviewAdaptor;
|
||||
use crate::{xdg::Xdg, MERGED_YAZI};
|
||||
|
|
@ -35,7 +36,7 @@ impl Default for Preview {
|
|||
let preview = toml::from_str::<Outer>(&MERGED_YAZI).unwrap().preview;
|
||||
|
||||
let cache_dir =
|
||||
preview.cache_dir.filter(|p| !p.is_empty()).map_or_else(Xdg::cache_dir, PathBuf::from);
|
||||
preview.cache_dir.filter(|p| !p.is_empty()).map_or_else(Xdg::cache_dir, absolute_path);
|
||||
|
||||
Preview {
|
||||
adaptor: Default::default(),
|
||||
|
|
|
|||
|
|
@ -78,8 +78,7 @@ impl Default for Theme {
|
|||
|
||||
check_validation(theme.tab.validate());
|
||||
|
||||
theme.preview.syntect_theme =
|
||||
futures::executor::block_on(absolute_path(&theme.preview.syntect_theme));
|
||||
theme.preview.syntect_theme = absolute_path(&theme.preview.syntect_theme);
|
||||
|
||||
theme
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,22 @@
|
|||
use std::{env, path::PathBuf};
|
||||
|
||||
use shared::absolute_path;
|
||||
|
||||
pub(super) struct Xdg;
|
||||
|
||||
impl Xdg {
|
||||
pub(super) fn config_dir() -> Option<PathBuf> {
|
||||
if let Some(s) = env::var_os("YAZI_CONFIG_HOME").filter(|s| !s.is_empty()) {
|
||||
return Some(absolute_path(s));
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
{
|
||||
dirs::config_dir().map(|p| p.join("yazi").join("config"))
|
||||
}
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
{
|
||||
std::env::var_os("XDG_CONFIG_HOME")
|
||||
env::var_os("XDG_CONFIG_HOME")
|
||||
.map(PathBuf::from)
|
||||
.filter(|p| p.is_absolute())
|
||||
.or_else(|| dirs::home_dir().map(|h| h.join(".config")))
|
||||
|
|
@ -25,7 +31,7 @@ impl Xdg {
|
|||
}
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
{
|
||||
std::env::var_os("XDG_STATE_HOME")
|
||||
env::var_os("XDG_STATE_HOME")
|
||||
.map(PathBuf::from)
|
||||
.filter(|p| p.is_absolute())
|
||||
.or_else(|| dirs::home_dir().map(|h| h.join(".local/state")))
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@ use std::{env, path::{Path, PathBuf}};
|
|||
|
||||
use tokio::fs;
|
||||
|
||||
pub async fn absolute_path(p: impl AsRef<Path>) -> PathBuf {
|
||||
pub fn absolute_path(p: impl AsRef<Path>) -> PathBuf {
|
||||
let p = p.as_ref();
|
||||
if let Ok(p) = p.strip_prefix("~") {
|
||||
if let Some(home) = env::var_os("HOME") {
|
||||
return PathBuf::from_iter([&home, p.as_os_str()]);
|
||||
}
|
||||
}
|
||||
fs::canonicalize(p).await.unwrap_or_else(|_| p.to_path_buf())
|
||||
std::fs::canonicalize(p).unwrap_or_else(|_| p.to_path_buf())
|
||||
}
|
||||
|
||||
pub fn readable_path(p: &Path, base: &Path) -> String {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue