commit 7124dfe217c47f3a10f336c71806192be88bf654 Author: Lukas Winkler Date: Sat Feb 5 21:16:50 2022 +0100 first version diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c403c34 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +.idea/ diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..747fd45 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "prettypwd" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..5f2a504 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "prettypwd" +version = "0.1.0" +edition = "2021" + +[dependencies] + +[profile.release] +lto = true +# strip = "symbols" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..b1a1e2b --- /dev/null +++ b/src/main.rs @@ -0,0 +1,66 @@ +extern crate core; + +use std::env; + + +fn simplify_string(pwd: String, home: String) -> String { + let prettyhome = pwd.replacen(home.as_str(), "/~", 1); + let dirs: Vec<&str> = prettyhome.split("/").collect(); + let mut print_dirs: Vec<&str> = Vec::new(); + if dirs.len() > 4 { + if dirs[1] != "~" { + print_dirs.push("") + } + print_dirs.push(dirs[1]); + print_dirs.push("…"); + print_dirs.extend(dirs[dirs.len() - 2..].to_vec()) + } else { print_dirs = dirs } + // println!("{:#?}", print_dirs); + return print_dirs.join("/").replacen("/~", "~", 1); +} + +fn main() { + let pwd = env::var("PWD"); + let pwd = match pwd { + Ok(test) => test, + Err(error) => panic!("{:?}", error) + }; + let home = env::var("HOME"); + let home = match home { + Ok(test) => test, + Err(error) => panic!("{:?}", error) + }; + println!("{}", simplify_string(pwd, home)); +} + + +#[cfg(test)] +mod tests { + use super::*; + + const TEST_HOME: &str = "/home/user"; + + fn comparison_helper(input: &str, output: &str) { + assert_eq!( + simplify_string(input.to_string(), TEST_HOME.to_string()) + , output.to_string() + ); + } + + #[test] + fn it_works() { + comparison_helper("/test", "/test"); + } + + #[test] + fn shortening() { + comparison_helper("/var/log/sometool", "/var/log/sometool"); + comparison_helper("/var/log/sometool/subdir", "/var/…/sometool/subdir"); + } + + #[test] + fn homedir() { + comparison_helper("/home/user/sometool/subdir", "~/sometool/subdir"); + comparison_helper("/home/user/sometool/subdir/subsubdir", "~/…/subdir/subsubdir"); + } +}