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
# 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\]\\$ \[\]"
}