Files
dotfiles/.bash/.bash_promt
2025-11-19 15:56:21 +01:00

88 lines
2.1 KiB
Bash

setPrompt() {
if [ "$color_prompt" != yes ]; then
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND}"
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
return
fi
case "$TERM" in
xterm*|rxvt*)
;;
*)
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
return
;;
esac
PROMPT_COMMAND="updatePrompt${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
PS2="|"
}
updatePrompt() {
local prev_exit="$?"
# color_helper_>>color<< (Note: \[\]= escaping)
local chR="\[\033[1;91m\]" #red
local chW="\[\033[00m\]" #white
local chG="\[\033[01;32m\]" #green
local chB="\[\033[0;34m\]" #blue
local chP="\[\033[0;35m\]" #purple
local chY="\[\033[0;33m\]" #yellow
PS1=""
if [ "$prev_exit" -eq 0 ]; then
PS1+="$chG$chW"
else
PS1+="$chR$chW"
fi
local jobs
jobs="$(jobs -p | wc -w)"
[ "$jobs" -ne 0 ] && \
PS1+="${chY}$jobs$chW"
PS1+="${debian_chroot:+($debian_chroot)}"
PS1+=" At ${chG}\A${chW}"
PS1+=" by ${chP}\u${chW}"
sudo -n true 2>/dev/null && \
PS1+="${chR} (sudo)${chW}"
PS1+=" in "
if \git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
local branch
branch="$(\git symbolic-ref -q HEAD)"
PS1+="[${branch#refs/heads/}"
local status
status="$(git for-each-ref --format='%(upstream:trackshort)' "$branch" 2>/dev/null | awk '!seen[$1]++ {printf $1}')"
status+="$(git status --porcelain 2>/dev/null | awk '!seen[$1]++ {printf $1}')"
[ "$status" != "" ] && \
PS1+="|$chY$status$chW"
PS1+="] "
fi
PS1+="${chB}\w${chW}"
PS1+="\n${PS1_jaaENV:-:}"
}
setPrompt
unset color_prompt
unset -f setPrompt
PROMPT_COMMAND+='; history -a'
§p() { # toggle promt
if [[ "$1" == '--help' ]]; then
\cat <<- "HELP"
§p [--help]
§p <…cmd>
Toggle <…cmd> in $PROMPT_COMMAND
- history v1: `history -a`
- history v2: `history -n; history -w; history -c; history -r`
HELP
return 0
fi
local cmd="$*"
if [[ -z "$cmd" ]]; then
declare -p PROMPT_COMMAND
return 0
fi
if [[ "$PROMPT_COMMAND" == *"; $cmd"* ]]; then
PROMPT_COMMAND="${PROMPT_COMMAND/; $cmd}"
else
PROMPT_COMMAND+="; $cmd"
fi
}
complete -A command -A variable §p
# vim: set filetype=sh tabstop=4 shiftwidth=4 textwidth=250 :