bashrc: prompt revisited

This commit is contained in:
Vahagn Khachatryan
2020-02-24 15:02:09 -05:00
parent 2b4acf6e01
commit fbd8aa8e74

View File

@@ -70,23 +70,15 @@ if [ -n "$PS1" ]; then
# If there is no terminal info in the system for current terminal but there is # If there is no terminal info in the system for current terminal but there is
# one in local terminfo then use it. # one in local terminfo then use it.
# #
tput -T $TERM longname 2>/dev/null >/dev/null #tput -T $TERM longname 2>/dev/null >/dev/null
if [ "$?" -ne "0" ] && [ -f $HOME/.terminfo/$kernel/${TERM:0:1}/$TERM ]; then #if [ "$?" -ne "0" ] && [ -f $HOME/.terminfo/$kernel/${TERM:0:1}/$TERM ]; then
export TERMINFO=$HOME/.terminfo/$kernel; # export TERMINFO=$HOME/.terminfo/$kernel;
fi #fi
# #
# Number of colors and standard colors. # Number of colors and standard colors.
# #
c_num=$(tput colors) c_num=$(tput colors)
# regular foreground #
c_red=$(tput setaf 1)
c_green=$(tput setaf 2)
c_orange=$(tput setaf 3)
c_blue=$(tput setaf 4)
c_pink=$(tput setaf 33)
c_cyan=$(tput setaf 6)
c_white=$(tput setaf 7)
c_viol=$(tput setaf 99)
# bold foreground # bold foreground
#cbf_red=$(tput bold; tput setaf 1) #cbf_red=$(tput bold; tput setaf 1)
# #
@@ -95,6 +87,23 @@ if [ -n "$PS1" ]; then
if [ $c_num -ge 256 ] && [ -f ~/.dir_colors ]; then if [ $c_num -ge 256 ] && [ -f ~/.dir_colors ]; then
eval $(dircolors ~/.dir_colors) eval $(dircolors ~/.dir_colors)
fi fi
function term_colors(){
for i in {0..15}; do
for j in {0..15}; do
c=$((i*16+j));
printf " $(tput setab $c)%04d" $c;
done;
printf "$(tput sgr0)\n";
done
for i in {0..15}; do
for j in {0..15}; do
c=$((i*16+j));
printf " $(tput setaf $c)%04d" $c;
done;
printf "$(tput sgr0)\n";
done
}
fi fi
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
@@ -107,38 +116,26 @@ if [ -n "$PS1" ]; then
# #
if [ $c_num -ge 256 ]; then if [ $c_num -ge 256 ]; then
c_reset="$(tput sgr0)" c_reset="$(tput sgr0)"
c_user="$c_green" c_user="$(tput setaf 112)" #Green
c_cwd="$c_viol" c_cwd="$(tput setaf 99)"
c_time="$c_pink" c_time="$(tput setaf 33)" #Light blue
c_branch="$c_cyan" c_branch="$(tput setaf 138)"
c_exit="$c_red" c_exit="$(tput setaf 203)" #Red
c_jobs="$c_orange" c_jobs="$(tput setaf 220)" #Yellow
else else
c_reset="$(tput sgr0)" c_reset="$(tput sgr0)"
c_user="$c_green" c_user="$(tput setaf 2)" #Green
c_cwd="$c_viol" c_cwd="$(tput setaf 7)" #White
c_time="$c_pink" c_time="$(tput setaf 6)" #Cyan
c_branch="$c_cyan" c_branch="$(tput setaf 6)" #Cyan
c_exit="$c_red" c_exit="$(tput setaf 1)" #Red
c_jobs="$c_orange" c_jobs="$(tput setaf 3)" #Yellow
fi fi
[ -n "$(which svn)" ] && prompt_check_svn=true [ -n "$(which svn)" ] && prompt_check_svn=true
[ -n "$(which git)" ] && prompt_check_git=true [ -n "$(which git)" ] && prompt_check_git=true
# export PROMPT_COMMAND="__prompt_command"
# 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:" # username@host:
PS1+="\[$c_time\]\t" # time
PS1+=" \[$c_cwd\]\w" # 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_reset\]\$ " # reset colors and print $
export PROMPT_COMMAND="__prompt_command; $PROMPT_COMMAND"
function __prompt_command() function __prompt_command()
{ {
# #
@@ -147,15 +144,16 @@ if [ -n "$PS1" ]; then
# #
local exit_code="$?" local exit_code="$?"
prompt_extra="" prompt_extra=""
PS1="\[$c_user\]\u@\h:" # username@host:
PS1+="\[$c_time\]\t" # time
PS1+=" \[$c_cwd\]\w" # working_dir
# #
# git branch if exist # git branch if exist
# #
if [ -n "$prompt_check_git" ]; then if [ -n "$prompt_check_git" ]; then
local git_branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null | tr -d ' ') local git_branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null | tr -d ' ')
if [ -n "$git_branch" ]; then if [ -n "$git_branch" ]; then
git_text="[$git_branch]" PS1+="\[$c_branch\]/$git_branch"
else
git_text=""
fi fi
fi fi
# #
@@ -164,29 +162,36 @@ if [ -n "$PS1" ]; then
if [ -n "$prompt_check_svn" ]; then if [ -n "$prompt_check_svn" ]; then
local svn_rev=$(svn info . 2> /dev/null | awk -F ':' '/Revision:/ { print $2 }') local svn_rev=$(svn info . 2> /dev/null | awk -F ':' '/Revision:/ { print $2 }')
if [ -n "$svn_rev" ]; then if [ -n "$svn_rev" ]; then
svn_text="[$svn_rev]" svn_text="@$svn_rev"
else PS1+="\[$c_branch\]\$svn_text" # svn revision
svn_text=""
fi fi
fi fi
# #
# exit code if not zero # exit code if not zero
# #
if [ "$exit_code" -ne "0" ]; then if [ "$exit_code" -ne "0" ]; then
exit_text="[exit=$exit_code]" PS1+=",\[$c_exit\]rc=$exit_code"
else
exit_text=""
fi fi
# #
# Info about jobs. # Info about jobs.
# #
local jobs_bg=$(jobs -r | wc -l | tr -d ' ') local jobs_bg=$(jobs -r | wc -l | tr -d ' ')
local jobs_stopped=$(jobs -s | wc -l | tr -d ' ') if [ $jobs_bg -gt 0 ]; then
if [ $jobs_bg -gt 0 ] || [ $jobs_stopped -gt 0 ]; then PS1+=",\[$c_jobs\]bg=$jobs_bg"
jobs_text="[bg:$jobs_bg,stp:$jobs_stopped]"
else
jobs_text=""
fi fi
#
# Info about jobs.
#
local jobs_stopped=$(jobs -s | wc -l | tr -d ' ')
if [ $jobs_stopped -gt 0 ]; then
PS1+=",\[$c_jobs\]stp=$jobs_stopped"
fi
#
# Colors should be set here and surrounded with \[\]otherwise bash fails to
# calculate prompt length. The text is set through PROMPT_COMMAND
PS1+="\[$c_reset\]\$ " # reset colors and print $
} }
# Turn on checkwinsize # Turn on checkwinsize
shopt -s checkwinsize shopt -s checkwinsize