diff --git a/source.sh b/source.sh index 433d25f..adaede6 100644 --- a/source.sh +++ b/source.sh @@ -3,6 +3,8 @@ bin_path=$(pwd)/target/debug/make_prompt PROMPT_COMMAND='make_prompt' make_prompt () { - local prompt_pref=$($bin_path $?) + local lastexit=$? + local bgjobs=$(jobs | wc -l) + local prompt_pref=$($bin_path $lastexit $bgjobs) PS1="$prompt_pref" } diff --git a/src/make_prompt.rs b/src/make_prompt.rs index 1198622..cf0ad3c 100644 --- a/src/make_prompt.rs +++ b/src/make_prompt.rs @@ -5,7 +5,7 @@ use std::io::BufRead; fn fixed_width(input: &String, len: usize) -> String { - let clen = input.len(); + let clen = input.chars().count(); const PLACE_HOLDER: &str = "🤄"; if clen > len @@ -21,8 +21,8 @@ fn fixed_width(input: &String, len: usize) -> String else { let n_pad = len - clen; - let n_pad_left = n_pad / 2; - let n_pad_right = n_pad_left + { if n_pad % 2 == 0 {0} else {1}}; + let n_pad_right = n_pad / 2; + let n_pad_left = n_pad_right + { if n_pad % 2 == 0 {0} else {1}}; let mut result: String = str::repeat(" ", n_pad_left).to_owned(); result.push_str(input); result.push_str(&str::repeat(" ", n_pad_right)); @@ -34,7 +34,7 @@ fn battery_info(width_to: usize) -> String { const BATTERY_DIR: &str = "/sys/class/power_supply/BAT0/"; const SYMB_POWER: &str = "↯"; - const SYMB_BATT: &str = "🔋"; + const SYMB_BATT: &str = "🔋"; let bat_path = std::path::Path::new(BATTERY_DIR); @@ -197,15 +197,28 @@ fn main() } }; + let raw_cwd = getenv("PWD"); + + let home = getenv("HOME"); + let cwd = { + if raw_cwd.starts_with(&home) + { + let everything_after_home = &raw_cwd[home.len()..]; + let mut res = "~".to_string(); + res.push_str(everything_after_home); + res + } + else + { + raw_cwd.to_string() + } + }; + + let bgjobs = { if args.len() <= 2 { - let promise = std::env::current_dir(); - match promise - { - Ok(v) => v.display().to_string(), - Err(_reason) => panic!("failed to get cwd") - } + "0".to_string() } else { @@ -219,18 +232,23 @@ fn main() print!("{}{}", shell_color_str(&"┌[", SH_GREEN) , battery_info(12)); print!("{}{}", shell_color_str(&"|", SH_GREEN) - , fixed_width(&get_git_branch(& std::path::Path::new(&cwd)), 12)); + , fixed_width(&get_git_branch(& std::path::Path::new(&raw_cwd)), 10)); print!("{}{}", shell_color_str(&"|", SH_GREEN) - , fixed_width(&get_editor(), 10)); + , fixed_width(&get_editor(), 12)); print!("{}{}", shell_color_str(&"|", SH_GREEN) - , fixed_width(lastexit, 4)); + , fixed_width(lastexit, 3)); println!("{}", shell_color_str(&"]┐", SH_GREEN)); } { print!("{}{}", shell_color_str(&"╞[", SH_GREEN) - , fixed_width(&getenv("HOSTNAME"), 12)); + , shell_color_str(&fixed_width(&getenv("HOSTNAME"), 12), SH_CYAN)); print!("{}{}", shell_color_str(&"|", SH_GREEN) - , fixed_width(&getenv("USER"), 10)); + , shell_color_str(&fixed_width(&getenv("USER"), 10), SH_RED)); + print!("{}{}", shell_color_str(&"|", SH_GREEN) + , fixed_width(&cpu_arch, 12)); + print!("{}{}", shell_color_str(&"|", SH_GREEN) + , fixed_width(&bgjobs, 3)); + println!("{}", shell_color_str(&"]┘", SH_GREEN)); } {