diff --git a/src/context.rs b/src/context.rs index 630c0875d..65e90d8ca 100644 --- a/src/context.rs +++ b/src/context.rs @@ -131,6 +131,12 @@ impl<'a> Context<'a> { let right = arguments.is_present("right"); + let width = arguments + .value_of("terminal_width") + .and_then(|w| w.parse().ok()) + .or_else(|| terminal_size().map(|(w, _)| w.0 as usize)) + .unwrap_or(80); + Context { config, properties, @@ -141,9 +147,7 @@ impl<'a> Context<'a> { repo: OnceCell::new(), shell, right, - width: terminal_size() - .map(|(w, _)| w.0 as usize) - .unwrap_or_default(), + width, #[cfg(test)] env: HashMap::new(), #[cfg(test)] diff --git a/src/init/starship.bash b/src/init/starship.bash index 8d88657bc..abff609c6 100644 --- a/src/init/starship.bash +++ b/src/init/starship.bash @@ -49,10 +49,10 @@ starship_precmd() { if [[ $STARSHIP_START_TIME ]]; then STARSHIP_END_TIME=$(::STARSHIP:: time) STARSHIP_DURATION=$((STARSHIP_END_TIME - STARSHIP_START_TIME)) - PS1="$(::STARSHIP:: prompt --status=$STARSHIP_CMD_STATUS --pipestatus="${STARSHIP_PIPE_STATUS[*]}" --jobs="$NUM_JOBS" --cmd-duration=$STARSHIP_DURATION)" + PS1="$(::STARSHIP:: prompt --terminal-width="$COLUMNS" --status=$STARSHIP_CMD_STATUS --pipestatus="${STARSHIP_PIPE_STATUS[*]}" --jobs="$NUM_JOBS" --cmd-duration=$STARSHIP_DURATION)" unset STARSHIP_START_TIME else - PS1="$(::STARSHIP:: prompt --status=$STARSHIP_CMD_STATUS --pipestatus="${STARSHIP_PIPE_STATUS[*]}" --jobs="$NUM_JOBS")" + PS1="$(::STARSHIP:: prompt --terminal-width="$COLUMNS" --status=$STARSHIP_CMD_STATUS --pipestatus="${STARSHIP_PIPE_STATUS[*]}" --jobs="$NUM_JOBS")" fi STARSHIP_PREEXEC_READY=true # Signal that we can safely restart the timer } diff --git a/src/init/starship.fish b/src/init/starship.fish index bf8944ca4..04a218ff0 100644 --- a/src/init/starship.fish +++ b/src/init/starship.fish @@ -9,11 +9,11 @@ function fish_prompt # Account for changes in variable name between v2.7 and v3.0 set STARSHIP_DURATION "$CMD_DURATION$cmd_duration" set STARSHIP_JOBS (count (jobs -p)) - ::STARSHIP:: prompt --status=$STARSHIP_CMD_STATUS --pipestatus=$pipestatus --keymap=$STARSHIP_KEYMAP --cmd-duration=$STARSHIP_DURATION --jobs=$STARSHIP_JOBS + ::STARSHIP:: prompt --terminal-width="$COLUMNS" --status=$STARSHIP_CMD_STATUS --pipestatus=$pipestatus --keymap=$STARSHIP_KEYMAP --cmd-duration=$STARSHIP_DURATION --jobs=$STARSHIP_JOBS end function fish_right_prompt - ::STARSHIP:: prompt --right --status=$STARSHIP_CMD_STATUS --pipestatus=$pipestatus --keymap=$STARSHIP_KEYMAP --cmd-duration=$STARSHIP_DURATION --jobs=$STARSHIP_JOBS + ::STARSHIP:: prompt --right --terminal-width="$COLUMNS" --status=$STARSHIP_CMD_STATUS --pipestatus=$pipestatus --keymap=$STARSHIP_KEYMAP --cmd-duration=$STARSHIP_DURATION --jobs=$STARSHIP_JOBS end # Disable virtualenv prompt, it breaks starship diff --git a/src/init/starship.ps1 b/src/init/starship.ps1 index 8af60ba10..8d0179ff0 100644 --- a/src/init/starship.ps1 +++ b/src/init/starship.ps1 @@ -74,6 +74,7 @@ function global:prompt { "prompt" "--path=$($cwd.Path)", "--logical-path=$($cwd.LogicalPath)", + "--terminal-width=$($Host.UI.RawUI.WindowSize.Width)", "--jobs=$($jobs)" ) diff --git a/src/init/starship.zsh b/src/init/starship.zsh index 0de2b9893..00355e0d9 100644 --- a/src/init/starship.zsh +++ b/src/init/starship.zsh @@ -91,5 +91,6 @@ export STARSHIP_SESSION_KEY=${STARSHIP_SESSION_KEY:0:16}; # Trim to 16-digits if VIRTUAL_ENV_DISABLE_PROMPT=1 setopt promptsubst -PROMPT='$(::STARSHIP:: prompt --keymap="$KEYMAP" --status="$STARSHIP_CMD_STATUS" --pipestatus="${STARSHIP_PIPE_STATUS[*]}" --cmd-duration="$STARSHIP_DURATION" --jobs="$STARSHIP_JOBS_COUNT")' -RPROMPT='$(::STARSHIP:: prompt --right --keymap="$KEYMAP" --status="$STARSHIP_CMD_STATUS" --pipestatus="${STARSHIP_PIPE_STATUS[*]}" --cmd-duration="$STARSHIP_DURATION" --jobs="$STARSHIP_JOBS_COUNT")' +PROMPT='$(::STARSHIP:: prompt --terminal-width="$COLUMNS" --keymap="$KEYMAP" --status="$STARSHIP_CMD_STATUS" --pipestatus="${STARSHIP_PIPE_STATUS[*]}" --cmd-duration="$STARSHIP_DURATION" --jobs="$STARSHIP_JOBS_COUNT")' +RPROMPT='$(::STARSHIP:: prompt --right --terminal-width="$COLUMNS" --keymap="$KEYMAP" --status="$STARSHIP_CMD_STATUS" --pipestatus="${STARSHIP_PIPE_STATUS[*]}" --cmd-duration="$STARSHIP_DURATION" --jobs="$STARSHIP_JOBS_COUNT")' + diff --git a/src/main.rs b/src/main.rs index 7a9142a8d..73ea3e587 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,6 +30,13 @@ fn main() { .long_help("Bash and Zsh supports returning codes for each process in a pipeline.") .multiple(true); + let terminal_width_arg = Arg::with_name("terminal_width") + .short("w") + .long("terminal-width") + .value_name("TERMINAL_WIDTH") + .help("The width of the current interactive terminal.") + .takes_value(true); + let path_arg = Arg::with_name("path") .short("p") .long("path") @@ -107,6 +114,7 @@ fn main() { ) .arg(&status_code_arg) .arg(&pipestatus_arg) + .arg(&terminal_width_arg) .arg(&path_arg) .arg(&logical_path_arg) .arg(&cmd_duration_arg) @@ -130,6 +138,7 @@ fn main() { ) .arg(&status_code_arg) .arg(&pipestatus_arg) + .arg(&terminal_width_arg) .arg(&path_arg) .arg(&logical_path_arg) .arg(&cmd_duration_arg) @@ -187,6 +196,7 @@ fn main() { .about("Explains the currently showing modules") .arg(&status_code_arg) .arg(&pipestatus_arg) + .arg(&terminal_width_arg) .arg(&path_arg) .arg(&logical_path_arg) .arg(&cmd_duration_arg) @@ -198,6 +208,7 @@ fn main() { .about("Prints timings of all active modules") .arg(&status_code_arg) .arg(&pipestatus_arg) + .arg(&terminal_width_arg) .arg(&path_arg) .arg(&logical_path_arg) .arg(&cmd_duration_arg)