mirror of
https://github.com/romkatv/powerlevel10k.git
synced 2024-11-26 05:50:07 +00:00
Refactor command_execution_time
segment
- Change internal precision to nanoseconds - Let the user decide about desired precision - Add tests
This commit is contained in:
parent
edb51fcba3
commit
a202537dd7
2 changed files with 74 additions and 14 deletions
|
@ -563,14 +563,33 @@ prompt_custom() {
|
||||||
# Display the duration the command needed to run.
|
# Display the duration the command needed to run.
|
||||||
prompt_command_execution_time() {
|
prompt_command_execution_time() {
|
||||||
set_default POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD 3
|
set_default POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD 3
|
||||||
|
set_default POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION 2
|
||||||
|
|
||||||
local duration=$_P9K_COMMAND_DURATION
|
# Print time in human readable format
|
||||||
|
# For that use `strftime` and convert
|
||||||
|
# the duration (float) to an seconds
|
||||||
|
# (integer).
|
||||||
|
# See http://unix.stackexchange.com/a/89748
|
||||||
|
local humanReadableDuration
|
||||||
|
if (( _P9K_COMMAND_DURATION > 3600 )); then
|
||||||
|
humanReadableDuration=$(strftime '%H:%M:%S' $(( int(rint(_P9K_COMMAND_DURATION)) )))
|
||||||
|
elif (( _P9K_COMMAND_DURATION > 60 )); then
|
||||||
|
humanReadableDuration=$(strftime '%M:%S' $(( int(rint(_P9K_COMMAND_DURATION)) )))
|
||||||
|
else
|
||||||
|
# If the command executed in seconds, print as float.
|
||||||
|
# Convert to float
|
||||||
|
if [[ "${POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION}" == "0" ]]; then
|
||||||
|
# If user does not want microseconds, then we need to convert
|
||||||
|
# the duration to an integer.
|
||||||
|
typeset -i humanReadableDuration
|
||||||
|
else
|
||||||
|
typeset -F ${POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION} humanReadableDuration
|
||||||
|
fi
|
||||||
|
humanReadableDuration=$_P9K_COMMAND_DURATION
|
||||||
|
fi
|
||||||
|
|
||||||
[[ $_P9K_COMMAND_DURATION -gt 60 ]] && duration=$(strftime '%M:%S' $_P9K_COMMAND_DURATION)
|
if (( _P9K_COMMAND_DURATION >= POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD )); then
|
||||||
[[ $_P9K_COMMAND_DURATION -gt 3600 ]] && duration=$(strftime '%H:%M:%S' $_P9K_COMMAND_DURATION)
|
"$1_prompt_segment" "$0" "$2" "red" "226" "${humanReadableDuration}" 'EXECUTION_TIME_ICON'
|
||||||
|
|
||||||
if [ $_P9K_COMMAND_DURATION -ge $POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD ]; then
|
|
||||||
"$1_prompt_segment" "$0" "$2" "red" "226" "${duration}" 'EXECUTION_TIME_ICON'
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1179,13 +1198,13 @@ build_right_prompt() {
|
||||||
}
|
}
|
||||||
|
|
||||||
powerlevel9k_preexec() {
|
powerlevel9k_preexec() {
|
||||||
_P9K_TIMER_START=$EPOCHSECONDS
|
_P9K_TIMER_START=$EPOCHREALTIME
|
||||||
}
|
}
|
||||||
|
|
||||||
powerlevel9k_prepare_prompts() {
|
powerlevel9k_prepare_prompts() {
|
||||||
RETVAL=$?
|
RETVAL=$?
|
||||||
|
|
||||||
_P9K_COMMAND_DURATION=$((EPOCHSECONDS - _P9K_TIMER_START))
|
_P9K_COMMAND_DURATION=$((EPOCHREALTIME - _P9K_TIMER_START))
|
||||||
# Reset start time
|
# Reset start time
|
||||||
_P9K_TIMER_START=99999999999
|
_P9K_TIMER_START=99999999999
|
||||||
|
|
||||||
|
@ -1267,6 +1286,9 @@ prompt_powerlevel9k_setup() {
|
||||||
# initialize timing functions
|
# initialize timing functions
|
||||||
zmodload zsh/datetime
|
zmodload zsh/datetime
|
||||||
|
|
||||||
|
# Initialize math functions
|
||||||
|
zmodload zsh/mathfunc
|
||||||
|
|
||||||
# initialize hooks
|
# initialize hooks
|
||||||
autoload -Uz add-zsh-hook
|
autoload -Uz add-zsh-hook
|
||||||
|
|
||||||
|
|
|
@ -23,20 +23,58 @@ function testCommandExecutionTimeIsNotShownIfTimeIsBelowThreshold() {
|
||||||
unset _P9K_COMMAND_DURATION
|
unset _P9K_COMMAND_DURATION
|
||||||
}
|
}
|
||||||
|
|
||||||
function testCommandExecutionTimesThresholdCouldBeChanged() {
|
function testCommandExecutionTimeThresholdCouldBeChanged() {
|
||||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world command_execution_time)
|
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
|
||||||
POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=1
|
POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=1
|
||||||
_P9K_COMMAND_DURATION=2
|
_P9K_COMMAND_DURATION=2.03
|
||||||
|
|
||||||
assertEquals "%K{red} %F{226%}Dur%f %F{226}2 %k%F{red}%f " "$(build_left_prompt)"
|
assertEquals "%K{red} %F{226%}Dur%f %F{226}2.03 %k%F{red}%f " "$(build_left_prompt)"
|
||||||
|
|
||||||
unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
|
unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
|
||||||
unset _P9K_COMMAND_DURATION
|
unset _P9K_COMMAND_DURATION
|
||||||
unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD
|
unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testCommandExecutionTimeThresholdCouldBeSetToZero() {
|
||||||
|
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
|
||||||
|
POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0
|
||||||
|
_P9K_COMMAND_DURATION=0.03
|
||||||
|
|
||||||
|
assertEquals "%K{red} %F{226%}Dur%f %F{226}0.03 %k%F{red}%f " "$(build_left_prompt)"
|
||||||
|
|
||||||
|
unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
|
||||||
|
unset _P9K_COMMAND_DURATION
|
||||||
|
unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD
|
||||||
|
}
|
||||||
|
|
||||||
|
function testCommandExecutionTimePrecisionCouldBeChanged() {
|
||||||
|
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
|
||||||
|
POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0
|
||||||
|
POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=4
|
||||||
|
_P9K_COMMAND_DURATION=0.0001
|
||||||
|
|
||||||
|
assertEquals "%K{red} %F{226%}Dur%f %F{226}0.0001 %k%F{red}%f " "$(build_left_prompt)"
|
||||||
|
|
||||||
|
unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
|
||||||
|
unset _P9K_COMMAND_DURATION
|
||||||
|
unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION
|
||||||
|
unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD
|
||||||
|
}
|
||||||
|
|
||||||
|
function testCommandExecutionTimePrecisionCouldBeSetToZero() {
|
||||||
|
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
|
||||||
|
POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
|
||||||
|
_P9K_COMMAND_DURATION=23.5001
|
||||||
|
|
||||||
|
assertEquals "%K{red} %F{226%}Dur%f %F{226}23 %k%F{red}%f " "$(build_left_prompt)"
|
||||||
|
|
||||||
|
unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
|
||||||
|
unset _P9K_COMMAND_DURATION
|
||||||
|
unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION
|
||||||
|
}
|
||||||
|
|
||||||
function testCommandExecutionTimeIsFormattedHumandReadbleForMinuteLongCommand() {
|
function testCommandExecutionTimeIsFormattedHumandReadbleForMinuteLongCommand() {
|
||||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world command_execution_time)
|
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
|
||||||
_P9K_COMMAND_DURATION=180
|
_P9K_COMMAND_DURATION=180
|
||||||
|
|
||||||
assertEquals "%K{red} %F{226%}Dur%f %F{226}03:00 %k%F{red}%f " "$(build_left_prompt)"
|
assertEquals "%K{red} %F{226%}Dur%f %F{226}03:00 %k%F{red}%f " "$(build_left_prompt)"
|
||||||
|
@ -46,7 +84,7 @@ function testCommandExecutionTimeIsFormattedHumandReadbleForMinuteLongCommand()
|
||||||
}
|
}
|
||||||
|
|
||||||
function testCommandExecutionTimeIsFormattedHumandReadbleForHourLongCommand() {
|
function testCommandExecutionTimeIsFormattedHumandReadbleForHourLongCommand() {
|
||||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world command_execution_time)
|
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
|
||||||
_P9K_COMMAND_DURATION=7200
|
_P9K_COMMAND_DURATION=7200
|
||||||
|
|
||||||
assertEquals "%K{red} %F{226%}Dur%f %F{226}02:00:00 %k%F{red}%f " "$(build_left_prompt)"
|
assertEquals "%K{red} %F{226%}Dur%f %F{226}02:00:00 %k%F{red}%f " "$(build_left_prompt)"
|
||||||
|
|
Loading…
Reference in a new issue