113 lines
2.7 KiB
Bash
Executable file
113 lines
2.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
||
export PS1
|
||
|
||
function print_help () {
|
||
local invoke_name='change_bash_prompt'
|
||
|
||
cat << EOF
|
||
Change the current bash prompt
|
||
|
||
USAGE: $invoke_name [--help] [color-mode] [components ...]
|
||
|
||
[-h|--help] Show this message
|
||
|
||
host | hostname Hostname of system
|
||
tty Terminal's name
|
||
pwd | dir Present working directory
|
||
user Username
|
||
git Git branch
|
||
space | tab 4 white space characters
|
||
exit | code Last non-zero exit code
|
||
|
||
EXAMPLES:
|
||
$invoke_name # Reset prompt
|
||
$invoke_name tty pwd git exit # Default prompt
|
||
$invoke_name tab tab user exit # Very minimal
|
||
EOF
|
||
}
|
||
|
||
# Select color mode =================================================
|
||
function is_default_prompt () {
|
||
[[ "$#" -eq 0 ]]
|
||
}
|
||
|
||
function exit_code () {
|
||
local code="$?"
|
||
|
||
if [[ "$code" != "0" ]]; then
|
||
printf " [%d]" "$code"
|
||
fi
|
||
}
|
||
|
||
function change_bash_prompt () {
|
||
# Set colors ======================================================
|
||
local purple='\[\033[0;35;1m\]'
|
||
local yellow='\[\033[0;33;1m\]'
|
||
local red='\[\033[0;31;1m\]'
|
||
|
||
# Prompt components ===============================================
|
||
local hostname="${purple}"'[\h]'
|
||
local tty="${purple}$(tty | cut -c6-12)"
|
||
local cwd="${yellow}"'\W'
|
||
local user="${red}"'\u'
|
||
local git="${user}"
|
||
local exit="${red}"'$(exit_code)'
|
||
local prompt_end='\[\e[m\]\$ ' # Trailing nbsp (u00A0) for tmux reverse search
|
||
|
||
if [ -f ~/.git-prompt.bash ]; then
|
||
local git="${red}"'$(__git_ps1 "(%s)")'
|
||
fi
|
||
|
||
local prompt=''
|
||
|
||
[[ "$IS_VIFM_NEST" != 'T' ]] || prompt+="<VIFM>" # Alert when nested in vifm
|
||
|
||
# Default prompts =================================================
|
||
if is_default_prompt "$@"; then
|
||
if [[ -n $SSH_TTY ]] || [[ -n $SSH_CLIENT ]] || [[ -n $SSH_CONNECTION ]]; then
|
||
prompt+="${hostname}:${cwd} ${git}${exit}"
|
||
else
|
||
prompt+="${tty}:${cwd} ${git}${exit}"
|
||
fi
|
||
fi
|
||
|
||
# Build customized prompts ========================================
|
||
local seperator=':'
|
||
|
||
for opt in "$@"; do
|
||
case "$opt" in
|
||
host | hostname) prompt+="$hostname" ;;
|
||
tty) prompt+="$tty" ;;
|
||
cwd | pwd | dir) prompt+="$cwd" ;;
|
||
user) prompt+="$user" ;;
|
||
exit | code) prompt+="$exit" ;;
|
||
git)
|
||
prompt+="$git"
|
||
seperator=''
|
||
;;
|
||
space | tab)
|
||
prompt+=" "
|
||
seperator=''
|
||
;;
|
||
-h | --help)
|
||
print_help "$@"
|
||
return 0
|
||
;;
|
||
*)
|
||
printf 'Unrecognized option `%s`\n' "$opt"
|
||
printf 'Rerun with --help for more information\n'
|
||
return 1
|
||
;;
|
||
esac
|
||
|
||
prompt+="$seperator"
|
||
seperator=' '
|
||
done
|
||
|
||
PS1="${prompt}${prompt_end}"
|
||
}
|
||
|
||
change_bash_prompt "$@"
|
||
|
||
# vim: set ft=bash ff=unix:
|