more sensible code

This commit is contained in:
Candifloss 2024-08-14 20:28:16 +05:30
parent 4eca128f2c
commit b0144c5d07

View File

@ -2,15 +2,66 @@ use std::env::current_dir as current_dir;
use std::env::var_os as var_os;
use std::env::args as args;
use colored::Colorize;
use std::path::PathBuf;
use std::ffi::OsString;
fn get_shell_char (shell: String) -> String {
let shell_char = match shell.as_str() {
"bash"|"/bin/bash"
=> "",
"zsh"|"/bin/zsh"|"/usr/bin/zsh"
=> "󰰶",
"fish"
=> "󰈺",
"nushell"
=> "",
"ion"
=> "",
"oursh"
=> "󱢇",
_
=> "󱆃",
};
shell_char.to_string()
}
fn abrev_path (pwd: PathBuf, homedir: String) -> String {
let mut path = pwd.display().to_string();
path = path.replace(&homedir, "~"); // Abreviate homedir with "~"
let mut short_dir = path.clone();
let slashes = path.matches("/").count();
if slashes > 3 {
let parts: Vec<&str> = path.split("/").collect();
let len = parts.len() - 1;
let mut fch: String;
for p in &parts[0..len] {
let part = p;
fch = part.chars().next().expect("REASON").to_string(); //1st char of p
short_dir = short_dir.replace(part, &fch);
}
}
short_dir
}
fn root_user (user: Option<OsString>) -> bool {
let u = user.expect("UnknownUser").to_str().expect("UnknownUser").to_string();
if u == "root"
{ true }
else
{ false }
}
fn main() -> std::io::Result<()> {
let angle = "";
let pwd = current_dir()?;
let mut dir = pwd.display().to_string();
let args: Vec<String> = args().collect();
let shell: String;
let user = var_os("USER").expect("noDir").to_str().expect("noDir").to_string();
let homedir = var_os("HOME").expect("noDir").to_str().expect("noDir").to_string();
let user = var_os("USER"); //.expect("UnknownUser").to_str().expect("UnknownUser").to_string();
//let user = var_os("USER").expect("UnknownUser").to_str().expect("UnknownUser").to_string();
let homedir = var_os("HOME").expect("UnknownDir").to_str().expect("UnknownDir").to_string();
if args.len() > 1 {
shell = args[1].clone();
@ -18,40 +69,13 @@ fn main() -> std::io::Result<()> {
else {
shell = "none".to_string();
}
let shell_char = match shell.as_str() {
"bash" => "",
"zsh" => "󰰶",
"fish" => "󰈺",
"nushell" => "",
"ion" => "",
_ => "󱆃",
};
dir = str::replace(&dir, &homedir, "~"); // Abreviate homedir with "~"
let mut dir0 = dir.clone();
let slashes = dir.matches("/").count();
//println!("{}",slashes);
if slashes > 3 {
// let mut dir0 = dir;
let parts: Vec<&str> = dir.split("/").collect();
let len = parts.len() - 1;
let mut fch: String;
for p in &parts[0..len] {
let part = p;
fch = part.chars().next().expect("REASON").to_string(); //1st char of p
dir0 = str::replace(&dir0, part, &fch);
//println!("{}__{}__{}",p,fch,dir0);
}
}
//dir = dir0;
//if root_user(user) {
// println!("heh");
//}
print!("{} {}{} ",
shell_char.truecolor(75,75,75),
dir0.italic().truecolor(75,75,75),
get_shell_char(shell).truecolor(75,75,75),
abrev_path(pwd,homedir).italic().truecolor(75,75,75),
angle.truecolor(0, 255, 180),
);
Ok(())