Update prompt
This commit is contained in:
parent
1f0f28ba20
commit
0a09be0087
50
.prompt
50
.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 "\[[34m\][\[[31m\]$(__sig $PEC)\[[34m\]] ")\[[1m[34m\][\[[3\$([ $(id -u) -eq 0 ] && printf 1 || printf 3)m\]\u\[[35m\]@\[[36m\]\h\[[35m\]:\[[32m\]\w\[[34m\]] \[[33m\]$(__get_cmd_time)\[[38;2;\$RANDOM;\$RANDOM;\${RANDOM}m\]\\$ \[[0m\]"
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue