diff options
author | Kevin Song <chipbuster@users.noreply.github.com> | 2019-08-12 20:41:59 -0700 |
---|---|---|
committer | Matan Kushner <hello@matchai.me> | 2019-08-12 23:41:59 -0400 |
commit | a87c0750ccd10a157f19486b926b788dc1cf7338 (patch) | |
tree | b3846e039223e18fef99354a362870f7e6ebe61b /src | |
parent | 1d6ce77a81a43b8cbffdd7b595859697ad27e3e4 (diff) |
fix: Fix issue with jobs and extra whitespace on MacOS with BSD… (#145)
MacOS wc has a habit of leaving nasty spaces in the output, which was
messing up our argparser.
To fix, quote the output from the jobs command, then have Rust trim out
whitespace in the jobs module before parsing.
Diffstat (limited to 'src')
-rw-r--r-- | src/init.rs | 11 | ||||
-rw-r--r-- | src/modules/jobs.rs | 1 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/init.rs b/src/init.rs index a80dcd5ca..16d466df2 100644 --- a/src/init.rs +++ b/src/init.rs @@ -54,11 +54,16 @@ pub fn init(shell_name: &str) { /* Bash does not currently support command durations (see issue #124) for details https://github.com/starship/starship/issues/124 + +We need to quote the output of `$(jobs -p | wc -l)` since MacOS `wc` leaves +giant spaces in front of the number (e.g. " 3"), which messes up the +word-splitting. Instead, quote the whole thing, then let Rust do the whitespace +trimming within the jobs module. */ const BASH_INIT: &str = r##" starship_precmd() { - PS1="$(starship prompt --status=$? --jobs=$(jobs -p | wc -l))"; + PS1="$(starship prompt --status=$? --jobs="$(jobs -p | wc -l)")"; }; PROMPT_COMMAND=starship_precmd; "##; @@ -83,10 +88,10 @@ starship_precmd() { if [[ $STARSHIP_START_TIME ]]; then STARSHIP_END_TIME="$(date +%s)"; STARSHIP_DURATION=$((STARSHIP_END_TIME - STARSHIP_START_TIME)); - PROMPT="$(starship prompt --status=$STATUS --cmd-duration=$STARSHIP_DURATION --jobs=$(jobs | wc -l))"; + PROMPT="$(starship prompt --status=$STATUS --cmd-duration=$STARSHIP_DURATION --jobs="$(jobs | wc -l)")"; unset STARSHIP_START_TIME; else - PROMPT="$(starship prompt --status=$STATUS --jobs=$(jobs | wc -l))"; + PROMPT="$(starship prompt --status=$STATUS --jobs="$(jobs | wc -l)")"; fi }; starship_preexec(){ diff --git a/src/modules/jobs.rs b/src/modules/jobs.rs index 4a89a1af3..649c2f8b0 100644 --- a/src/modules/jobs.rs +++ b/src/modules/jobs.rs @@ -17,6 +17,7 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { let num_of_jobs = arguments .value_of("jobs") .unwrap_or("0") + .trim() .parse::<i64>() .ok()?; if num_of_jobs == 0 { |