Very prompt

Signed-off-by: Aleksandar 'The Cobra' Widulski <thecobra@riseup.net>
This commit is contained in:
Aleksandar 'The Cobra' Widulski 2022-03-06 09:11:27 -05:00
parent a7d441da71
commit 0b48a81b2a
1 changed files with 82 additions and 61 deletions

143
.prompt
View File

@ -4,10 +4,11 @@
__debug_trap() { __debug_trap() {
# Set necessary pre-command variables (PROMPT_COMMAND is a # Set necessary pre-command variables (PROMPT_COMMAND is a
# command so its excluded here) # command so its excluded here)
if [[ "$BASH_COMMAND" != "$PROMPT_COMMAND" && if [[ "$BASH_COMMAND" != "$PROMPT_COMMAND" ]]; then
"$LAST_BASH_COMMAND" == "$PROMPT_COMMAND" ]]; then if [[ "$LAST_BASH_COMMAND" == "$PROMPT_COMMAND" ]]; then
LAST_RT="$EPOCHREALTIME" LAST_RT="$EPOCHREALTIME"
INC_TIME=1 INC_TIME=1
fi
fi fi
LAST_BASH_COMMAND="$BASH_COMMAND" LAST_BASH_COMMAND="$BASH_COMMAND"
} }
@ -16,72 +17,86 @@ trap '__debug_trap' DEBUG
__get_cmd_time() { __get_cmd_time() {
# Set hours minutes seconds and remove preceding zeros # Set hours minutes seconds and remove preceding zeros
TZ=UTC local YEAR=$((10#0$(($(TZ=UTC printf '%(%Y)T' $CMD_TIME)))-1970))
local YEAR=$(($((10#$(printf '%(%Y)T' $CMD_TIME)))-1970)) local DAYS=$((10#$(TZ=UTC printf '%(%j)T' $CMD_TIME)))
local DAYS=$((10#$(printf '%(%j)T' $CMD_TIME))) local HOUR=$((10#$(TZ=UTC printf '%(%H)T' $CMD_TIME)))
local HOUR=$((10#$(printf '%(%H)T' $CMD_TIME))) local MINS=$((10#$(TZ=UTC printf '%(%M)T' $CMD_TIME)))
local MINS=$((10#$(printf '%(%M)T' $CMD_TIME))) local SECS=$((10#$(TZ=UTC printf '%(%S)T' $CMD_TIME)))
local SECS=$((10#$(printf '%(%S)T' $CMD_TIME))) #wtf sex???
# Choose whether or not to print hours minutes and seconds # Choose whether or not to print hours minutes and seconds
[ $CMD_TIME -ge 31536000 ] && printf '%sd ' ${YEAR:-0} [[ $CMD_TIME -ge 31536000 ]] && printf '%sy ' ${YEAR:-0}
[ $CMD_TIME -ge 86400 ] && printf '%sd ' ${DAYS:-0} [[ $CMD_TIME -ge 86400 ]] && printf '%sd ' ${DAYS:-0}
[ $CMD_TIME -ge 3600 ] && printf '%sh ' ${HOUR:-0} [[ $CMD_TIME -ge 3600 ]] && printf '%sh ' ${HOUR:-0}
[ $CMD_TIME -ge 60 ] && printf '%sm ' ${MINS:-0} [[ $CMD_TIME -ge 60 ]] && printf '%sm ' ${MINS:-0}
[ $CMD_TIME -ge 1 ] && printf '%ss ' ${SECS:-0} [[ $CMD_TIME -ge 1 ]] && printf '%ss ' ${SECS:-0}
printf '%sμs' ${CMD_US:-0} printf '%sμs' ${CMD_US:-0}
} }
__sig() { __sig() {
# Giant switch case for getting the name of the signal (`kill -l`) # Giant switch case for getting the name of the signal (`kill -l`)
case $1 in local RED="\[\033[31m\]"
126) printf ACCES ;; local WHT="\[\033[37m\]"
127) printf NOENT ;; j=0
129) printf HUP ;; for i in $@; do
130) printf INT ;; if [[ $j != 0 ]]; then
131) printf QUIT ;; printf '%s' "$WHT"
132) printf ILL ;; [[ $(eval echo \${$((j+1))}) == ";"
133) printf TRAP ;; || $(eval echo \${$((j-1))}) == ";" ]] &&
134) printf ABRT ;; printf ";" ||
135) printf BUS ;; printf "|"
136) printf FPE ;; printf '%s' "$RED"
137) printf KILL ;; fi
138) printf USR1 ;; j=$((j+1))
139) printf SEGV ;; case $i in
140) printf USR2 ;; 126) printf ACCES ;;
141) printf PIPE ;; 127) printf NOENT ;;
142) printf ALRM ;; 129) printf HUP ;;
143) printf TERM ;; 130) printf INT ;;
144) printf STKFLT ;; 131) printf QUIT ;;
145) printf CHLD ;; 132) printf ILL ;;
146) printf CONT ;; 133) printf TRAP ;;
147) printf STOP ;; 134) printf ABRT ;;
148) printf TSTP ;; 135) printf BUS ;;
149) printf TTIN ;; 136) printf FPE ;;
150) printf TTOU ;; 137) printf KILL ;;
151) printf URG ;; 138) printf USR1 ;;
152) printf XCPU ;; 139) printf SEGV ;;
153) printf XFSZ ;; 140) printf USR2 ;;
154) printf VTALRM ;; 141) printf PIPE ;;
155) printf PROF ;; 142) printf ALRM ;;
156) printf WINCH ;; 143) printf TERM ;;
157) printf IO ;; 144) printf STKFLT ;;
158) printf PWR ;; 145) printf CHLD ;;
159) printf SYS ;; 146) printf CONT ;;
16[3-9]|1[7-8][0-9]|19[0-2]) printf RT$(($1-128)) ;; # Savagery 147) printf STOP ;;
*) printf $1 ;; # Print exit code if not in list 148) printf TSTP ;;
esac 149) printf TTIN ;;
150) printf TTOU ;;
151) printf URG ;;
152) printf XCPU ;;
153) printf XFSZ ;;
154) printf VTALRM ;;
155) printf PROF ;;
156) printf WINCH ;;
157) printf IO ;;
158) printf PWR ;;
159) printf SYS ;;
16[3-9]|1[7-8][0-9]|19[0-2]) printf RT$(($1-128)) ;; # Savagery
*) printf $i ;; # Print exit code if not in list
esac
done
} }
__prompt() { __prompt() {
# Get exit code # Get exit code
local PEC=${?:-0} local PLC=(${PIPESTATUS[@]})
# LAST_RT is not set before a command is run # *_RT may not be set
LAST_RT="${LAST_RT:-$EPOCHREALTIME}" LAST_RT="${LAST_RT:-$EPOCHREALTIME}"
PROMPT_RT="${PROMPT_RT:-$EPOCHREALTIME}"
# Reset time when prompt was first displayed after command # Reset time when prompt was first displayed after command
if [ ${INC_TIME:-1} -ne 0 ]; then if [[ ${INC_TIME:-1} != 0 ]]; then
PROMPT_RT="$EPOCHREALTIME" PROMPT_RT="$EPOCHREALTIME"
INC_TIME=0 INC_TIME=0
fi fi
@ -89,8 +104,9 @@ __prompt() {
# Get relative times # Get relative times
# Remove decimal point, simulating multiplying by 1 million # Remove decimal point, simulating multiplying by 1 million
PROMPT_RT1M="${PROMPT_RT%.*}${PROMPT_RT#*.}" local PROMPT_RT1M="${PROMPT_RT%.*}${PROMPT_RT#*.}"
LAST_RT1M="${LAST_RT%.*}${LAST_RT#*.}" local LAST_RT1M="${LAST_RT%.*}${LAST_RT#*.}"
# Subtract and divide by 1 million to get a more accurate difference # Subtract and divide by 1 million to get a more accurate difference
CMD_TIME="$(((PROMPT_RT1M-LAST_RT1M)/1000000))" CMD_TIME="$(((PROMPT_RT1M-LAST_RT1M)/1000000))"
CMD_TIME="${CMD_TIME:-0}" CMD_TIME="${CMD_TIME:-0}"
@ -101,7 +117,7 @@ __prompt() {
local PROMPT_US_CLN="$((10#$PROMPT_US))" local PROMPT_US_CLN="$((10#$PROMPT_US))"
local PROMPT_US_CLN="${PROMPT_US_CLN:-0}" local PROMPT_US_CLN="${PROMPT_US_CLN:-0}"
[ $PROMPT_US_CLN -lt $LAST_US ] && [[ $PROMPT_US_CLN < $LAST_US ]] &&
CMD_US="$((1$PROMPT_US-$LAST_US))" || CMD_US="$((1$PROMPT_US-$LAST_US))" ||
CMD_US="$(($PROMPT_US_CLN-$LAST_US))" CMD_US="$(($PROMPT_US_CLN-$LAST_US))"
CMD_US="$((10#$CMD_US))" CMD_US="$((10#$CMD_US))"
@ -123,10 +139,15 @@ __prompt() {
# Text # Text
# [INT], [4], etc. # [INT], [4], etc.
local SIG="$([ $PEC -ne 0 ] && printf '%s[%s%s%s] ' "$BLU" "$RED" "$(__sig $PEC)" "$BLU")" for i in ${PLC[@]}; do
if [[ $i > 0 ]]; then
local SIG="$(printf '%s[%s%s%s] ' "$BLU" "$RED" "$(__sig ${PLC[@]})" "$BLU")"
break
fi
done
# [user@homeserver:~] # [user@homeserver:~]
local COL="$([ $UID -eq 0 ] && printf %s "$RED" || printf %s "$YLW")" local COL="$([[ $UID == 0 ]] && printf %s "$RED" || printf %s "$YLW")"
local UHD="$BLD$BLU[$COL\u$PRP@$CYN\h$PRP:$GRN\w$BLU]" local UHD="$BLD$BLU[$COL\u$PRP@$CYN\h$PRP:$GRN\w$BLU]"
# 2y 351d 12m 43s 382969μs # 2y 351d 12m 43s 382969μs