Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # setup color variables
- color_is_on=
- color_red=
- color_green=
- color_yellow=
- color_blue=
- color_white=
- color_gray=
- color_bg_red=
- color_off=
- if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
- color_is_on=true
- color_red="\[$(/usr/bin/tput setaf 1)\]"
- color_green="\[$(/usr/bin/tput setaf 2)\]"
- color_yellow="\[$(/usr/bin/tput setaf 3)\]"
- color_blue="\[$(/usr/bin/tput setaf 6)\]"
- color_white="\[$(/usr/bin/tput setaf 7)\]"
- color_gray="\[$(/usr/bin/tput setaf 8)\]"
- color_off="\[$(/usr/bin/tput sgr0)\]"
- color_error="$(/usr/bin/tput setab 1)$(/usr/bin/tput setaf 7)"
- color_error_off="$(/usr/bin/tput sgr0)"
- fi
- function prompt_command {
- local PS1_GIT=
- local PWDNAME=$PWD
- # get cursor position and add new line if we're not in first column
- exec < /dev/tty
- local OLDSTTY=$(stty -g)
- stty raw -echo min 0
- echo -en "\033[6n" > /dev/tty && read -sdR CURPOS
- stty $OLDSTTY
- [[ ${CURPOS##*;} -gt 1 ]] && echo "${color_error}.${color_error_off}"
- # beautify working firectory name
- if [ $HOME == $PWD ]; then
- PWDNAME="~"
- elif [ $HOME == ${PWD:0:${#HOME}} ]; then
- PWDNAME="~${PWD:${#HOME}}"
- fi
- # parse git status and get git variables
- parse_git_status
- # build b/w prompt for git
- [[ ! -z $GIT_BRANCH ]] && PS1_GIT=" (${GIT_BRANCH})"
- local color_user=
- if $color_is_on; then
- # set user color
- case `id -u` in
- 0) color_user=$color_red ;;
- *) color_user=$color_green ;;
- esac
- # build git status for prompt
- if [ ! -z $GIT_BRANCH ]; then
- if [ -z $GIT_DIRTY ]; then
- PS1_GIT=" (${color_green}${GIT_BRANCH}${color_off})"
- else
- PS1_GIT=" (${color_red}${GIT_BRANCH}${color_off})"
- fi
- fi
- fi
- # set new color prompt
- PS1="${color_user}${USER}${color_off}@${color_yellow}${HOSTNAME}${color_off}:${color_white}${PWDNAME}${color_off}${PS1_GIT} \$ "
- }
- PROMPT_COMMAND=prompt_command
- # get git status
- function parse_git_status {
- # clear git variables
- GIT_BRANCH=
- GIT_DIRTY=
- # exit if no git found in system
- local GIT_BIN=$(which git 2>/dev/null)
- [[ -z $GIT_BIN ]] && return
- # check we are in git repo
- local CUR_DIR=$PWD
- while [ ! -d ${CUR_DIR}/.git ] && [ ! $CUR_DIR = "/" ]; do CUR_DIR=${CUR_DIR%/*}; done
- [[ ! -d ${CUR_DIR}/.git ]] && return
- # 'git repo for dotfiles' fix: show git status only in home dir and other git repos
- [[ $CUR_DIR == $HOME ]] && [[ $PWD != $HOME ]] && return
- # get git branch
- GIT_BRANCH=$($GIT_BIN symbolic-ref HEAD 2>/dev/null)
- [[ -z $GIT_BRANCH ]] && return
- GIT_BRANCH=${GIT_BRANCH#refs/heads/}
- # get git status
- local GIT_STATUS=$($GIT_BIN status --porcelain 2>/dev/null)
- [[ -n $GIT_STATUS ]] && GIT_DIRTY=true
- }
Advertisement
Add Comment
Please, Sign In to add comment