diff --git a/zsh/prompt b/zsh/prompt index 88b1b0b..65d7788 100644 --- a/zsh/prompt +++ b/zsh/prompt @@ -176,6 +176,18 @@ set_prompt() { buffer="${buffer}%f> " PROMPT="${buffer}" + + local rbuffer="" + + if [[ ${CMD_DURATION:-0} -gt 0 ]]; then + printf -v formatted_duration "%.3f" "${CMD_DURATION}" + + rbuffer=" %F{yellow}${formatted_duration}s${rbuffer}" + fi + + [[ ${CMD_RC} -ne 0 ]] && rbuffer=" %F{red}${CMD_RC}${rbuffer}" + + RPROMPT="${rbuffer}%f" } # vim: ft=zsh diff --git a/zsh/rc b/zsh/rc index 935fed9..e70d34e 100644 --- a/zsh/rc +++ b/zsh/rc @@ -23,8 +23,18 @@ GIT_PS1_SHOWDIRTYSTATE=1 GIT_PS1_SHOWSTASHSTATE=1 GIT_PS1_SHOWUNTRACKEDFILES=1 +zmodload zsh/datetime + precmd() { - LAST_CMD_RC=$? + CMD_RC=$? + + if [[ -n ${CMD_START} ]]; then + CMD_END="${EPOCHREALTIME}" + CMD_DURATION=$(( ${CMD_END} - ${CMD_START} )) + unset CMD_START + unset CMD_END + fi + _direnv_hook psvar=() set_prompt @@ -33,6 +43,7 @@ precmd() { preexec() { set_term_title + CMD_START="${EPOCHREALTIME}" } chpwd() {