From 0a09be00875c65dcb1acb263b35c993bf69366f2 Mon Sep 17 00:00:00 2001 From: The Cobra Date: Tue, 1 Mar 2022 15:11:44 -0500 Subject: [PATCH] Update prompt --- .prompt | 50 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/.prompt b/.prompt index 7ecb983..fd6c6e0 100644 --- a/.prompt +++ b/.prompt @@ -1,22 +1,33 @@ #!/bin/bash # shebang for syntax highlightin purposes -export TIME_TOGGLE=0 -trap '[[ $BASH_COMMAND != "$PROMPT_COMMAND" ]] && export LAST_EPOCH="$EPOCHSECONDS" && export INC_TIME=1' DEBUG - -export TIME_TOGGLE=0 - -__get_cmd_time() { - if [ $COMMAND_TIME -ge 3600 ]; then - TZ=UTC printf 'took %(%Hh%Mm%Ss)T ' $COMMAND_TIME - elif [ $COMMAND_TIME -ge 60 ]; then - TZ=UTC printf 'took %(%Mm%Ss)T ' $COMMAND_TIME - elif [ $COMMAND_TIME -ge 1 ]; then - TZ=UTC printf 'took %(%Ss)T ' $COMMAND_TIME +__debug_trap() { + # Set necessary pre-command variables (PROMPT_COMMAND is a command + # so its excluded here) + if [[ "$BASH_COMMAND" != "$PROMPT_COMMAND" ]]; then + export LAST_EPOCH="$EPOCHSECONDS" + export LAST_REALTIME="$EPOCHREALTIME" + export INC_TIME=1 fi } +trap '__debug_trap' DEBUG + +__get_cmd_time() { + # Set hours minutes seconds and remove preceding zeros + local HOUR=$((10#$(TZ=UTC printf '%(%H)T' $CMD_TIME))) + local MINS=$((10#$(TZ=UTC printf '%(%M)T' $CMD_TIME))) + local SECS=$((10#$(TZ=UTC printf '%(%S)T' $CMD_TIME))) #wtf sex??? + + # Choose whether or not to print hours minutes and seconds + [ $CMD_TIME -ge 3600 ] && TZ=UTC printf '%sh ' ${HOUR:-0} + [ $CMD_TIME -ge 60 ] && TZ=UTC printf '%sm ' ${MINS:-0} + [ $CMD_TIME -ge 1 ] && TZ=UTC printf '%ss ' ${SECS:-0} + TZ=UTC printf '%sμs ' ${CMD_US:-0} +} + __sig() { + # Giant switch case for getting the name of the signal (`kill -l`) case $1 in 126) printf ACCES ;; 127) printf NOENT ;; @@ -51,18 +62,27 @@ __sig() { 157) printf IO ;; 158) printf PWR ;; 159) printf SYS ;; - 16[3-9]|1[7-8][0-9]|19[0-2]) printf RT$(($1-128)) ;; - *) printf $1 ;; + 16[3-9]|1[7-8][0-9]|19[0-2]) printf RT$(($1-128)) ;; # Savagery + *) printf $1 ;; # Print exit code if not in list esac } __prompt() { + # Get exit code PEC=$? + # Reset time when prompt was first displayed after command if [ $INC_TIME -ne 0 ]; then export PROMPT_EPOCH="$EPOCHSECONDS" + export PROMPT_REALTIME="$EPOCHREALTIME" export INC_TIME=0 fi - export COMMAND_TIME="$((PROMPT_EPOCH-LAST_EPOCH))" + + # Get relative times + export CMD_TIME="$((PROMPT_EPOCH-LAST_EPOCH))" + export CMD_US="$((1${PROMPT_REALTIME: -6}-$((10#${LAST_REALTIME: -6}))))" + export CMD_US="$((10#${CMD_US: -6}))" + + # Set the prompt export PS1="$([ $PEC -ne 0 ] && printf "\[\][\[\]$(__sig $PEC)\[\]] ")\[\][\[[3\$([ $(id -u) -eq 0 ] && printf 1 || printf 3)m\]\u\[\]@\[\]\h\[\]:\[\]\w\[\]] \[\]$(__get_cmd_time)\[[38;2;\$RANDOM;\$RANDOM;\${RANDOM}m\]\\$ \[\]" }