diff --git a/CHANGELOG.md b/CHANGELOG.md index 5db1f6e5..4b27a514 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,11 @@ Added an option to configure the path separator. If you want something else than an ordinary slash, you could set `POWERLEVEL9K_DIR_PATH_SEPARATOR` to whatever you want. +### New segment 'command_execution_time' added + +Shows the duration a command needed to run. By default only durations over 3 seconds +are shown (can be adjusted by setting POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD). + ### New segment 'dir_writable' added This segment displays a lock icon if your user has no write permissions in the current folder. diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index 7499197b..de00496c 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -560,6 +560,16 @@ prompt_custom() { fi } +# Display the duration the command needed to run. +prompt_command_execution_time() { + set_default POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD 3 + + local timing=$((EPOCHSECONDS - _P9K_TIMER_START)) + if [ $timing -ge $POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD ]; then + "$1_prompt_segment" "$0" "$2" "red" "226" "Dur ${timing}" '' + fi +} + # Dir: current working directory set_default POWERLEVEL9K_DIR_PATH_SEPARATOR "/" prompt_dir() { @@ -1164,6 +1174,10 @@ build_right_prompt() { done } +powerlevel9k_preexec() { + _P9K_TIMER_START=$EPOCHSECONDS +} + powerlevel9k_prepare_prompts() { RETVAL=$? @@ -1195,6 +1209,9 @@ $(print_icon 'MULTILINE_SECOND_PROMPT_PREFIX')" } prompt_powerlevel9k_setup() { + # Disable false display of command execution time + _P9K_TIMER_START=99999999999 + # Display a warning if the terminal does not support 256 colors local term_colors term_colors=$(echotc Co) @@ -1239,11 +1256,15 @@ prompt_powerlevel9k_setup() { powerlevel9k_vcs_init fi + # initialize timing functions + zmodload zsh/datetime + # initialize hooks autoload -Uz add-zsh-hook # prepare prompts add-zsh-hook precmd powerlevel9k_prepare_prompts + add-zsh-hook preexec powerlevel9k_preexec } prompt_powerlevel9k_setup "$@"