mirror of
https://github.com/romkatv/powerlevel10k.git
synced 2024-11-22 12:20: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.
|
||||
prompt_command_execution_time() {
|
||||
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)
|
||||
[[ $_P9K_COMMAND_DURATION -gt 3600 ]] && duration=$(strftime '%H:%M:%S' $_P9K_COMMAND_DURATION)
|
||||
|
||||
if [ $_P9K_COMMAND_DURATION -ge $POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD ]; then
|
||||
"$1_prompt_segment" "$0" "$2" "red" "226" "${duration}" 'EXECUTION_TIME_ICON'
|
||||
if (( _P9K_COMMAND_DURATION >= POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD )); then
|
||||
"$1_prompt_segment" "$0" "$2" "red" "226" "${humanReadableDuration}" 'EXECUTION_TIME_ICON'
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -1179,13 +1198,13 @@ build_right_prompt() {
|
|||
}
|
||||
|
||||
powerlevel9k_preexec() {
|
||||
_P9K_TIMER_START=$EPOCHSECONDS
|
||||
_P9K_TIMER_START=$EPOCHREALTIME
|
||||
}
|
||||
|
||||
powerlevel9k_prepare_prompts() {
|
||||
RETVAL=$?
|
||||
|
||||
_P9K_COMMAND_DURATION=$((EPOCHSECONDS - _P9K_TIMER_START))
|
||||
_P9K_COMMAND_DURATION=$((EPOCHREALTIME - _P9K_TIMER_START))
|
||||
# Reset start time
|
||||
_P9K_TIMER_START=99999999999
|
||||
|
||||
|
@ -1267,6 +1286,9 @@ prompt_powerlevel9k_setup() {
|
|||
# initialize timing functions
|
||||
zmodload zsh/datetime
|
||||
|
||||
# Initialize math functions
|
||||
zmodload zsh/mathfunc
|
||||
|
||||
# initialize hooks
|
||||
autoload -Uz add-zsh-hook
|
||||
|
||||
|
|
|
@ -23,20 +23,58 @@ function testCommandExecutionTimeIsNotShownIfTimeIsBelowThreshold() {
|
|||
unset _P9K_COMMAND_DURATION
|
||||
}
|
||||
|
||||
function testCommandExecutionTimesThresholdCouldBeChanged() {
|
||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world command_execution_time)
|
||||
function testCommandExecutionTimeThresholdCouldBeChanged() {
|
||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
|
||||
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 _P9K_COMMAND_DURATION
|
||||
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() {
|
||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world command_execution_time)
|
||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
|
||||
_P9K_COMMAND_DURATION=180
|
||||
|
||||
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() {
|
||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world command_execution_time)
|
||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
|
||||
_P9K_COMMAND_DURATION=7200
|
||||
|
||||
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