file manager
git clone https://git.lucas.co/cce-files.git
Support XDG Base Directory specification for persistence path
Cargo.toml | 6 +++---
Makefile | 2 +-
src/main.rs | 10 +++++-----
src/pages/browse.rs | 13 ++++++++++++-
src/services/fs.rs | 16 +++++++++++++---
5 files changed, 34 insertions(+), 13 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index e8d46ff..54da47b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "cce-filesystem-interface"
+name = "cce-files"
version = "0.1.0"
edition = "2024"
@@ -18,9 +18,9 @@ log = "0.4"
[lib]
-name = "cce_filesystem_interface"
+name = "cce_files"
path = "src/lib.rs"
[[bin]]
-name = "cce-filesystem-interface"
+name = "cce-files"
path = "src/main.rs"
diff --git a/Makefile b/Makefile
index bbf9283..5ad3b57 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ build:
install: build
mkdir -p ~/.local/bin
- install -m 755 ../target/release/cce-filesystem-interface ~/.local/bin/cce-filesystem-interface
+ install -m 755 ../target/release/cce-files ~/.local/bin/cce-files
run:
cargo run
diff --git a/src/main.rs b/src/main.rs
index af77cd7..12d201d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,9 +7,9 @@ use cce_ui::widget::{GraphController, PathController};
use notify::{Watcher, RecommendedWatcher, RecursiveMode, Config};
-use cce_filesystem_interface::{Message, pages, services};
-use cce_filesystem_interface::pages::Page;
-use cce_filesystem_interface::pages::browse::is_project_dir;
+use cce_files::{Message, pages, services};
+use cce_files::pages::Page;
+use cce_files::pages::browse::is_project_dir;
// ── State ───────────────────────────────────────────────────────────
@@ -608,8 +608,8 @@ impl Application for FilesystemApp {
}
} else {
WindowSettings {
- title: "Clear Filesystem Interface".to_string(),
- app_id: "cce-filesystem-interface".to_string(),
+ title: "Files".to_string(),
+ app_id: "cce-files".to_string(),
width: 1200,
height: 720,
fullscreen: false,
diff --git a/src/pages/browse.rs b/src/pages/browse.rs
index 2876350..8ee313f 100644
--- a/src/pages/browse.rs
+++ b/src/pages/browse.rs
@@ -533,11 +533,15 @@ mod tests {
fn test_directory_persistence() {
let temp_dir = std::env::temp_dir();
let original_home = std::env::var("HOME");
+ let original_xdg = std::env::var("XDG_CONFIG_HOME");
// Mock HOME env variable so we don't overwrite user's actual config
let mock_home = temp_dir.join("mock_home_dir_cce");
let _ = std::fs::create_dir_all(&mock_home);
- unsafe { std::env::set_var("HOME", &mock_home); }
+ unsafe {
+ std::env::set_var("HOME", &mock_home);
+ std::env::remove_var("XDG_CONFIG_HOME");
+ }
let test_dir = temp_dir.join("test_persist_dir");
let _ = std::fs::create_dir_all(&test_dir);
@@ -556,6 +560,13 @@ mod tests {
unsafe { std::env::remove_var("HOME"); }
}
+ // Restore XDG_CONFIG_HOME
+ if let Ok(val) = original_xdg {
+ unsafe { std::env::set_var("XDG_CONFIG_HOME", val); }
+ } else {
+ unsafe { std::env::remove_var("XDG_CONFIG_HOME"); }
+ }
+
// Clean up
let _ = std::fs::remove_dir_all(&mock_home);
let _ = std::fs::remove_dir(&test_dir);
diff --git a/src/services/fs.rs b/src/services/fs.rs
index 62189b3..5bacbcb 100644
--- a/src/services/fs.rs
+++ b/src/services/fs.rs
@@ -339,10 +339,20 @@ fn infer_file_type(name: &str, is_dir: bool) -> String {
}
fn get_last_dir_file_path() -> Option<PathBuf> {
- let home = std::env::var("HOME").ok()?;
- let dir = PathBuf::from(home).join(".config").join("cce");
+ let dir = if let Ok(xdg_config) = std::env::var("XDG_CONFIG_HOME") {
+ if !xdg_config.is_empty() {
+ PathBuf::from(xdg_config)
+ } else {
+ let home = std::env::var("HOME").ok()?;
+ PathBuf::from(home).join(".config")
+ }
+ } else {
+ let home = std::env::var("HOME").ok()?;
+ PathBuf::from(home).join(".config")
+ };
+ let dir = dir.join("cce").join("cce-files");
let _ = fs::create_dir_all(&dir);
- Some(dir.join("cce-filesystem-interface-last-dir.txt"))
+ Some(dir.join("cce-files-last-dir.txt"))
}
pub fn read_last_dir_internal() -> Option<PathBuf> {