From bb11ac83c156d96ecda3af9ae9a65cf4bf4c8b03 Mon Sep 17 00:00:00 2001 From: Vahagn Khachatryan Date: Mon, 6 Jun 2016 00:14:26 +0100 Subject: [PATCH] Prompt is fixed. Now it shows git branch, exit status, bg jobs and time. --- config/.bashrc | 243 +++++++++++++++++++++++++++---------------------- 1 file changed, 135 insertions(+), 108 deletions(-) diff --git a/config/.bashrc b/config/.bashrc index b1f0517..531d9f0 100755 --- a/config/.bashrc +++ b/config/.bashrc @@ -9,30 +9,30 @@ # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # -# Source global definitions +# Source global definitions # if [ -f /etc/bashrc ]; then - . /etc/bashrc + . /etc/bashrc else - if ! shopt -q login_shell ; then # We're not a login shell - for i in /etc/profile.d/*.sh; do - if [ -r "$i" ]; then - if [ "$PS1" ]; then - . $i - else - . $i &>/dev/null - fi - fi - done - unset i - fi + if ! shopt -q login_shell ; then # We're not a login shell + for i in /etc/profile.d/*.sh; do + if [ -r "$i" ]; then + if [ "$PS1" ]; then + . $i + else + . $i &>/dev/null + fi + fi + done + unset i + fi fi umask 002 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # -# Find out system details. +# Find out system details. # os=`uname -o` #GNU/Linux AIX Solaris cpu=`uname -p` #x86_64 powerpc sparc @@ -43,99 +43,134 @@ hostnm=`hostname` # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # -# Terminal colors. +# Terminal colors if interactive # -if [[ $- == *i* ]]; then +if [ -n "$PS1" ]; then # # If there is no terminal info in the system for current terminal but there is # one in local terminfo then use it. # - /bin/tput -T $TERM longname 2>/dev/null >/dev/null - if [[ $? -ne 0 && -f $HOME/.terminfo/$kernel/${TERM:0:1}/$TERM ]]; then + tput -T $TERM longname 2>/dev/null >/dev/null + if [ "$?" -ne "0" ] && [ -f $HOME/.terminfo/$kernel/${TERM:0:1}/$TERM ]; then export TERMINFO=$HOME/.terminfo/$kernel; fi - - ### - # Colors - ### - # reset terminal colors - c_reset="$(tput sgr0)" + # + # Number of colors and standard colors. + # + c_num=$(tput colors) # regular foreground - crf_red=$(tput setaf 1) - crf_green=$(tput setaf 2) - crf_orange=$(tput setaf 3) - crf_blue=$(tput setaf 4) - crf_pink=$(tput setaf 5) - crf_cyan=$(tput setaf 6) - crf_white=$(tput setaf 7) + c_red=$(tput setaf 1) + c_green=$(tput setaf 2) + c_orange=$(tput setaf 3) + c_blue=$(tput setaf 4) + c_pink=$(tput setaf 5) + c_cyan=$(tput setaf 6) + c_white=$(tput setaf 7) + c_viol=$(tput setaf 12) # bold foreground - cbf_red=$(tput bold; tput setaf 1) - cbf_green=$(tput bold; tput setaf 2) - cbf_orange=$(tput bold; tput setaf 3) - cbf_blue=$(tput bold; tput setaf 4) - cbf_pink=$(tput bold; tput setaf 5) - cbf_cyan=$(tput bold; tput setaf 6) - cbf_white=$(tput bold; tput setaf 7) - + #cbf_red=$(tput bold; tput setaf 1) # - # Load better colors. + # Load better colors for ls. # - if [ -f ~/.dir_colors ]; then + if [ $c_num -ge 256 ] && [ -f ~/.dir_colors ]; then eval $(dircolors ~/.dir_colors) fi fi # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # -# Prompt. +# Prompt if interactive # -if [[ "$PS1" ]]; then - export PROMPT_COMMAND=__prompt_command +if [ -n "$PS1" ]; then + # + # Set better colors if available. + # + if [ $c_num -ge 256 ]; then + c_reset="$(tput sgr0)" + c_user="$c_green" + c_cwd="$c_viol" + c_time="$c_pink" + c_branch="$c_cyan" + c_exit="$c_red" + c_jobs="$c_orange" + else + c_reset="$(tput sgr0)" + c_user="$c_green" + c_cwd="$c_viol" + c_time="$c_pink" + c_branch="$c_cyan" + c_exit="$c_red" + c_jobs="$c_orange" + fi + + [ -n "$(which svn)" ] && prompt_check_svn=true + [ -n "$(which git)" ] && prompt_check_git=true + + # + # Colors should be set here and surrounded with \[\]otherwise bash fails to + # calculate prompt length. The text is set through PROMPT_COMMAND + PS1="\[$c_user\]\u@\h: \[$c_cwd\]\w" # username@host: working_dir + PS1+="\[$c_branch\]\$git_text" # git branch + PS1+="\[$c_branch\]\$svn_text" # svn revision + PS1+="\[$c_exit\]\$exit_text" # exit status of last command + PS1+="\[$c_jobs\]\$jobs_text" # background/suspended jobs + PS1+=" \[$c_time\]\t" # time + PS1+="\[$c_reset\]\$ " # reset colors and print $ + + export PROMPT_COMMAND="__prompt_command; $PROMPT_COMMAND" function __prompt_command() { - local es=$? - if [ $es -eq 0 ]; then - local exit_code_color=$crf_green - else - local exit_code_color=$crf_red - fi - - local git_branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null | tr -d ' ') - local svn_rev=$(svn info . 2> /dev/null | awk -F ':' '/Revision:/ { print $2 }') - -# PS1="$cbf_blue[$exit_code_color\#$cbf_blue]" # command counter - PS1="$cbf_blue[$cbf_blue$?$cbf_blue]\n" # command counter -# PS1+=" " - PS1+="$cbf_white\u$crf_blue@$cbf_white\h$cbf_white" # username@host -# PS1+=":" -# PS1+="$crf_green\w" # working dir - - if [ -n "$git_branch" ]; then - PS1+=" " - PS1+="$cbf_blue[${cbf_white}$cbf_orange$git_branch$cbf_blue]" - fi - - if [ -n "$svn_rev" ]; then - PS1+=" " - PS1+="$cbf_blue[${cbf_white}$cbf_orange$svn_rev$cbf_blue]" - fi - - PS1+=">" - -# PS1+="$c_reset\n" + # + # get exit code before any command is run. + # TODO: doesn't work on pi. + # + local exit_code="$?" + prompt_extra="" + # + # git branch if exist + # + if [ -n "$prompt_check_git" ]; then + local git_branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null | tr -d ' ') + if [ -n "$git_branch" ]; then + git_text="[$git_branch]" + else + git_text="" + fi + fi + # + # svn branch if exist + # + if [ -n "$prompt_check_svn" ]; then + local svn_rev=$(svn info . 2> /dev/null | awk -F ':' '/Revision:/ { print $2 }') + if [ -n "$svn_rev" ]; then + svn_text="[$svn_rev]" + else + svn_text="" + fi + fi + # + # exit code if not zero + # + if [ "$exit_code" -ne "0" ]; then + exit_text="[exit=$exit_code]" + else + exit_text="" + fi + # + # Info about jobs. + # + local jobs_bg=$(jobs -r | wc -l | tr -d ' ') + local jobs_stopped=$(jobs -s | wc -l | tr -d ' ') + if [ $jobs_bg -gt 0 ] || [ $jobs_stopped -gt 0 ]; then + jobs_text="[bg:$jobs_bg,stp:$jobs_stopped]" + else + jobs_text="" + fi } - - # are we an interactive shell? -# if [ "$PS1" ]; then -# PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"' -# # Turn on checkwinsize -# shopt -s checkwinsize -# [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ " -# fi - + # Turn on checkwinsize + shopt -s checkwinsize fi - # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # # User specific environment and startup programs @@ -150,24 +185,17 @@ PATH=$MYLOCAL/bin:$PATH PATH=$MYSCRIPTS/bin:$PATH # -# VIM +# VIM # -#VIMDIR=/depot/vim-7.3/bin -#VIM=${VIMDIR}/vim -#if [ "$kernel" == "Linux" ]; then -# alias vi=$VIM -# alias vim=$VIM -# alias gvim=${VIMDIR}/gvim -# alias ctags="/depot/ctag-5.5.4/bin/ctags" -#fi +export EDITOR=vim # -# GIT +# GIT # [ -f $MYSCRIPTS/bash/git-completion.bash ] && . $MYSCRIPTSE/bash/git-completion.bash # -# GCC +# GCC # #if [ -e /depot/gcc-4.7.2/bin ]; then # PATH=/depot/gcc-4.7.2/bin:$PATH @@ -181,18 +209,18 @@ PATH=$MYSCRIPTS/bin:$PATH #fi # -# GDB +# GDB # #prepath /depot/gdb-7.5.1/bin # -# VTune Amplifier +# VTune Amplifier # #export INTEL_LICENSE_FILE=28518@us01-lic10:28518@us01-lic11:28518@us01-lic12:28518@tyndall #alias vtune=/depot/vtune_amplifier_xe_2013_update5/bin64/amplxe-gui # -# PURIFY and all. +# PURIFY and all. # #postpath /depot/coverity/swat/bin #export RSU_TEMPLATE2_INI=/depot/pure/templates2.ini @@ -204,15 +232,16 @@ PATH=$MYSCRIPTS/bin:$PATH #alias purecov="/depot/swe/a2007.12/bin/purecov" #alias quantify"/depot/swe/a2007.12/bin/quantify" -# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # -# Run local settings. +# Make sure to export PATH # -[ -f $PWD/.bashrc.local ] && . $PWD/.bashrc.local +export PATH +export HISTFILESIZE=5000 # Store 5000 commands in history +export HISTCONTROL=ignoredups # Don't put duplicate lines in the history. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # -# set alias +# Aliases # if [ $kernel == AIX ]; then alias l='ls -a' @@ -229,11 +258,9 @@ else fi alias cgrep="grep --include \*.cpp --include \*.h --include \*.c" +# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # -# Make sure to export PATH +# Run local settings. # -export PATH -#export LM_LICENSE_FILE -export HISTFILESIZE=5000 # Store 5000 commands in history -export HISTCONTROL=ignoredups # Don't put duplicate lines in the history. +[ -f $PWD/.bashrc.local ] && . $PWD/.bashrc.local