From 491d3fbff384d4b04483b54e5bb78d23bb1181c5 Mon Sep 17 00:00:00 2001 From: Rory Dudley Date: Thu, 28 Mar 2024 23:26:02 -0600 Subject: Remove hard-coded PATH Use $PATH, instead of a hard-coded PATH from main(). This means that there is no longer a need to pass around PATH to repl()/recite()/path::refresh(), since path::refresh() can call env::var directly. Since the hard-coded paths were removed, there needs to be some way to define $PATH. When running the debug build, dwvsh will look in 'dist/etc/dwvshrc' for the initial environment setup. For the release target, dwvsh will look in '/etc/dwvshrc'. After the global rc file is sourced, dwvsh will try to source ~/.dwvshrc if it exists, so users can extend their environment without root access (assuming a release install). --- src/compose.rs | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/compose.rs (limited to 'src/compose.rs') diff --git a/src/compose.rs b/src/compose.rs new file mode 100644 index 0000000..8c4b3ea --- /dev/null +++ b/src/compose.rs @@ -0,0 +1,58 @@ +use crate::poem::{read::Readable, recite::Reciteable, Poem}; +use std::fs; +use std::path::PathBuf; + +pub fn env() { + // Use local repo path if running the debug target + let global_rc = if cfg!(debug_assertions) { + let mut base = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + base.push("dist/etc/dwvshrc"); + base + } else { + PathBuf::from("/etc/dwvshrc") + }; + + // User defined rc file in ~ + let mut local_rc = PathBuf::from(env!("HOME")); + local_rc.push(".dwvshrc"); + + // Read, read, and recite + rrr(global_rc); + rrr(local_rc); +} + +fn rrr(path: PathBuf) { + let poetry = match fs::read_to_string(&path) { + Ok(poetry) => poetry, + Err(e) => { + if path.to_string_lossy().contains("etc/dwvshrc") { + eprintln!( + "dwvsh: unable to read global dwvshrc file: {}", + e.to_string().to_lowercase() + ); + } + return; + } + }; + + let poem = match Poem::read(poetry) { + Ok(poem) => poem, + Err(e) => { + eprintln!( + "dwvsh: error in {}: {}", + path.display(), + e.to_string().to_lowercase() + ); + return; + } + }; + + let mut bins = vec![]; + match poem.recite(&mut bins, None) { + Ok(_) => {} + Err(e) => { + eprintln!("dwvsh: {}", e.to_string().to_lowercase()); + return; + } + } +} -- cgit v1.2.3