Last active
August 29, 2015 14:02
-
-
Save devishot/47385a9667ac9a8f2c27 to your computer and use it in GitHub Desktop.
~/.bashrc hacks to Git-branch and pretty console. Preview: http://s1.postimg.org/5s2i1arsv/new_bashrc.png From cool-stuff of Mail.ru: http://habrahabr.ru/company/mailru/blog/145008/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 | |
# 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 | |
} | |
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: ${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=" (git: ${color_green}${GIT_BRANCH}${color_off})" | |
else | |
PS1_GIT=" (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}\n➜ " | |
} | |
PROMPT_COMMAND=prompt_command |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment