-
-
Save akostadinov/bc910869ec58ce2e6c884e78cb949b29 to your computer and use it in GitHub Desktop.
| function _shell_char { | |
| if [ "$_EXIT_CODE" -eq 0 ]; then | |
| #printf "%s" "$" | |
| printf "$RED$shellchar$RESET" | |
| else | |
| # printf "$RED$FancyX$RESET" | |
| printf "$RED$collision$RESET" | |
| fi | |
| } | |
| function _generated_ps1 { | |
| local _EXIT_CODE=$? # must be called first | |
| # using \001 and \002 instead of \[ \] here | |
| # https://unix.stackexchange.com/a/447520/14907 | |
| local RED="\001\033[0;31m\002" | |
| local RESET="\001\e[0m\002" | |
| # see https://unix.stackexchange.com/a/468983/14907 | |
| local FancyX="\001\342\002\234\227" | |
| local Checkmark="\001\342\002\234\223" | |
| # such unicodes see https://stackoverflow.com/a/602924/520567 | |
| local lightning='\001\xe2\002\x9a\xa1' | |
| local collision='\001\xf0\x9f\002\x92\xa5' | |
| local shellchar='\001\xf0\x9f\002\x90\x9a' | |
| printf "$RED%s${RESET}%s" "$(__git_ps1)" "$(_shell_char)" | |
| } | |
| new_line_ps1() { | |
| local _EXIT_CODE=$? # must be called first | |
| local LIGHT_YELLOW="\001\033[1;93m\002" | |
| local RESET="\001\e[0m\002" | |
| local _ y x _ | |
| # https://github.com/dylanaraps/pure-bash-bible#get-the-current-cursor-position | |
| IFS='[;' read -p $'\e[6n' -d R -rs _ y x _ | |
| if [[ "$x" != 1 ]]; then | |
| printf "\n${LIGHT_YELLOW}^^ no newline at end of output ^^\n${RESET}" | |
| fi | |
| return $_EXIT_CODE | |
| } | |
| # Fancy prompt function (from nhr) | |
| function proml { | |
| GIT_PS1_SHOWUPSTREAM="auto" | |
| GIT_PS1_SHOWUNTRACKEDFILES=1 | |
| GIT_PS1_SHOWDIRTYSTATE=1 | |
| # GIT_PS1_STATESEPARATOR="" | |
| GIT_PS1_HIDE_IF_PWD_IGNORED=1 | |
| # from git package | |
| if [ -f /usr/share/git-core/contrib/completion/git-prompt.sh ] ; then | |
| . /usr/share/git-core/contrib/completion/git-prompt.sh | |
| elif [ -f /usr/share/git/git-prompt.sh ] ; then | |
| . /usr/share/git/git-prompt.sh | |
| fi | |
| local BLUE="\[\033[0;34m\]" | |
| local LIGHT_BLUE="\[\033[0;36m\]" | |
| local RED="\[\033[0;31m\]" | |
| local LIGHT_RED="\[\033[1;31m\]" | |
| local GREEN="\[\033[0;32m\]" | |
| local LIGHT_GREEN="\[\033[1;32m\]" | |
| local WHITE="\[\033[1;37m\]" | |
| local LIGHT_GRAY="\[\033[0;37m\]" | |
| local BLACK="\[\033[0;30m\]" | |
| local RESET="\[\e[0m\]" | |
| # this is 🎩︎ hat in UTF, use `printf 🎩︎| hexdump -C` or `printf 🎩︎| od -t x1` | |
| # local HAT=`printf '\001\xf0\x9f\x8e\xa9\002\xef\xb8\x8e\x0a'` | |
| local HAT="\[🎩︎\]\e\e" | |
| case $TERM in | |
| xterm*) | |
| TITLEBAR='\[\033]0;\u@\h:\w\007\]' | |
| ;; | |
| *) | |
| TITLEBAR="" | |
| ;; | |
| esac | |
| # Standard Prompt | |
| #PS1="$LIGHT_BLUE[$BLUE\u $GREEN\W$LIGHT_BLUE] $RED\$(parse_git_branch)${RESET} $ " | |
| # Red Hat Prompt | |
| PS1="\$(new_line_ps1)$LIGHT_BLUE[$RED$HAT$BLUE\u $GREEN\W$LIGHT_BLUE]\$(_generated_ps1) " | |
| PS2='> ' | |
| PS4='+ ' | |
| } | |
| # Call the fancy prompt function | |
| proml |
There's also __git_ps1 but you need to enable it. In my ~/.bashrc I have:
if [ -f /usr/share/git-core/contrib/completion/git-prompt.sh ] ; then
. /usr/share/git-core/contrib/completion/git-prompt.sh
elif [ -f /usr/share/git/git-prompt.sh ] ; then
. /usr/share/git/git-prompt.sh
fiThe latter one is for a non-RH distro.
I have updated the gist to use the shell (see below) unicode character instead of $ as well report non-zero command exit status by changing that character to collision (see below). They take up 2 character spaces but with them I remove needless empty space after git info. These characters can be changed in _shell_char function if desired.
Also I implemented the suggestion of @ekohl to use git-prompt.sh. I'm not sure it is faster than my implementation of _parse_git_branch in revision 2 but it presents rich options.
Update: Added handling of commands without new line at end of output as another source of prompt corruption.
Really funny!! And nice redhat logo!
Cool!

Credits to @thrasr who provided original version. I only made it omit empty spaces before
$in case we are outside a git tree.