Update prompt

This commit is contained in:
The Cobra 2022-03-01 15:11:44 -05:00
parent 1f0f28ba20
commit 0a09be0087
1 changed files with 35 additions and 15 deletions

50
.prompt
View File

@ -1,22 +1,33 @@
#!/bin/bash #!/bin/bash
# shebang for syntax highlightin purposes # shebang for syntax highlightin purposes
export TIME_TOGGLE=0 __debug_trap() {
trap '[[ $BASH_COMMAND != "$PROMPT_COMMAND" ]] && export LAST_EPOCH="$EPOCHSECONDS" && export INC_TIME=1' DEBUG # Set necessary pre-command variables (PROMPT_COMMAND is a command
# so its excluded here)
export TIME_TOGGLE=0 if [[ "$BASH_COMMAND" != "$PROMPT_COMMAND" ]]; then
export LAST_EPOCH="$EPOCHSECONDS"
__get_cmd_time() { export LAST_REALTIME="$EPOCHREALTIME"
if [ $COMMAND_TIME -ge 3600 ]; then export INC_TIME=1
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
fi 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() { __sig() {
# Giant switch case for getting the name of the signal (`kill -l`)
case $1 in case $1 in
126) printf ACCES ;; 126) printf ACCES ;;
127) printf NOENT ;; 127) printf NOENT ;;
@ -51,18 +62,27 @@ __sig() {
157) printf IO ;; 157) printf IO ;;
158) printf PWR ;; 158) printf PWR ;;
159) printf SYS ;; 159) printf SYS ;;
16[3-9]|1[7-8][0-9]|19[0-2]) printf RT$(($1-128)) ;; 16[3-9]|1[7-8][0-9]|19[0-2]) printf RT$(($1-128)) ;; # Savagery
*) printf $1 ;; *) printf $1 ;; # Print exit code if not in list
esac esac
} }
__prompt() { __prompt() {
# Get exit code
PEC=$? PEC=$?
# Reset time when prompt was first displayed after command
if [ $INC_TIME -ne 0 ]; then if [ $INC_TIME -ne 0 ]; then
export PROMPT_EPOCH="$EPOCHSECONDS" export PROMPT_EPOCH="$EPOCHSECONDS"
export PROMPT_REALTIME="$EPOCHREALTIME"
export INC_TIME=0 export INC_TIME=0
fi 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\]\\$ \[\]" 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\]\\$ \[\]"
} }