diff --git a/.prompt b/.prompt index 35092fc..3c47824 100644 --- a/.prompt +++ b/.prompt @@ -4,11 +4,12 @@ __debug_trap() { # Set necessary pre-command variables (PROMPT_COMMAND is a command # so its excluded here) - if [[ "$BASH_COMMAND" != "$PROMPT_COMMAND" ]]; then - LAST_EPOCH="$EPOCHSECONDS" + if [[ "$BASH_COMMAND" != "$PROMPT_COMMAND" && + "$LAST_BASH_COMMAND" == "$PROMPT_COMMAND" ]]; then LAST_REALTIME="$EPOCHREALTIME" INC_TIME=1 fi + LAST_BASH_COMMAND="$BASH_COMMAND" } trap '__debug_trap' DEBUG @@ -73,19 +74,31 @@ __sig() { __prompt() { # Get exit code - PEC=$? + local PEC=$? # Reset time when prompt was first displayed after command if [ $INC_TIME -ne 0 ]; then - PROMPT_EPOCH="$EPOCHSECONDS" PROMPT_REALTIME="$EPOCHREALTIME" INC_TIME=0 fi # Get relative times - CMD_TIME="$((PROMPT_EPOCH-LAST_EPOCH))" + + # Remove decimal point, simulating multiplying by 1 million + PROMPT_RT1M="${PROMPT_REALTIME%.*}${PROMPT_REALTIME#*.}" + LAST_RT1M="${LAST_REALTIME%.*}${LAST_REALTIME#*.}" + # Subtract and divide by 1 million to get a more accurate difference + CMD_TIME="$(((PROMPT_RT1M-LAST_RT1M)/1000000))" + local LAST_US="$((10#${LAST_REALTIME: -6}))" - CMD_US="$((1${PROMPT_REALTIME: -6}-${LAST_US:-0}))" - CMD_US="$((10#${CMD_US: -6}))" + local LAST_US="${LAST_US:-0}" + local PROMPT_US="${PROMPT_REALTIME: -6}" + local PROMPT_US_CLN="$((10#$PROMPT_US))" + local PROMPT_US_CLN="${PROMPT_US_CLN:-0}" + + [ $PROMPT_US_CLN -lt $LAST_US ] && + CMD_US="$((1$PROMPT_US-$LAST_US))" || + CMD_US="$(($PROMPT_US_CLN-$LAST_US))" + CMD_US="$((10#$CMD_US))" # Set prompt sections