summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin Song <chipbuster@users.noreply.github.com>2019-08-12 20:41:59 -0700
committerMatan Kushner <hello@matchai.me>2019-08-12 23:41:59 -0400
commita87c0750ccd10a157f19486b926b788dc1cf7338 (patch)
treeb3846e039223e18fef99354a362870f7e6ebe61b /src
parent1d6ce77a81a43b8cbffdd7b595859697ad27e3e4 (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.rs11
-rw-r--r--src/modules/jobs.rs1
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 {