1
0
mirror of https://github.com/Llewellynvdm/starship.git synced 2025-01-15 19:26:50 +00:00

fix: handle variable bash $SHLVL behavior with explicit option (#4912)

* Accept shlvl as --shlvl option

* For bash only, pass --shlvl explicitly

* fmt

* Apply suggestion

Co-authored-by: David Knaack <davidkna@users.noreply.github.com>

* Apply suggestion

Co-authored-by: David Knaack <davidkna@users.noreply.github.com>

* parse_jobs -> parse_i64

---------

Co-authored-by: David Knaack <davidkna@users.noreply.github.com>
This commit is contained in:
Rich Lafferty 2024-12-27 06:14:10 -04:00 committed by GitHub
parent 9b6d394e01
commit 7ead2b55eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 12 additions and 5 deletions

View File

@ -868,8 +868,11 @@ pub struct Properties {
#[clap(short = 'k', long, default_value = "viins")]
pub keymap: String,
/// The number of currently running jobs
#[clap(short, long, default_value_t, value_parser=parse_jobs)]
#[clap(short, long, default_value_t, value_parser=parse_i64)]
pub jobs: i64,
/// The current value of SHLVL, for shells that mis-handle it in $()
#[clap(long, value_parser=parse_i64)]
pub shlvl: Option<i64>,
}
impl Default for Properties {
@ -883,6 +886,7 @@ impl Default for Properties {
cmd_duration: None,
keymap: "viins".to_string(),
jobs: 0,
shlvl: None,
}
}
}
@ -896,8 +900,8 @@ fn parse_trim<F: FromStr>(value: &str) -> Option<Result<F, F::Err>> {
Some(F::from_str(value))
}
fn parse_jobs(jobs: &str) -> Result<i64, ParseIntError> {
parse_trim(jobs).unwrap_or(Ok(0))
fn parse_i64(value: &str) -> Result<i64, ParseIntError> {
parse_trim(value).unwrap_or(Ok(0))
}
fn default_width() -> usize {

View File

@ -69,7 +69,7 @@ starship_precmd() {
eval "$STARSHIP_PROMPT_COMMAND"
fi
local -a ARGS=(--terminal-width="${COLUMNS}" --status="${STARSHIP_CMD_STATUS}" --pipestatus="${STARSHIP_PIPE_STATUS[*]}" --jobs="${NUM_JOBS}")
local -a ARGS=(--terminal-width="${COLUMNS}" --status="${STARSHIP_CMD_STATUS}" --pipestatus="${STARSHIP_PIPE_STATUS[*]}" --jobs="${NUM_JOBS}" --shlvl="${SHLVL}")
# Prepare the timer data, if needed.
if [[ -n "${STARSHIP_START_TIME-}" ]]; then
STARSHIP_END_TIME=$(::STARSHIP:: time)

View File

@ -9,7 +9,10 @@ use std::convert::TryInto;
const SHLVL_ENV_VAR: &str = "SHLVL";
pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
let shlvl = context.get_env(SHLVL_ENV_VAR)?.parse::<i64>().ok()?;
let props = &context.properties;
let shlvl = props
.shlvl
.or_else(|| context.get_env(SHLVL_ENV_VAR)?.parse::<i64>().ok())?;
let mut module = context.new_module("shlvl");
let config: ShLvlConfig = ShLvlConfig::try_load(module.config);