Browse Source

Attempting to do some neat trick with prompt... doesn't work ATM

tags/original
Bryan Miller 6 years ago
parent
commit
ed10164428
1 changed files with 87 additions and 56 deletions
  1. +87
    -56
      ps1.rc.sh

+ 87
- 56
ps1.rc.sh View File

@@ -21,74 +21,105 @@ declare -A symbols=(
[frownie]="☹"
)

last_section_bg=

# $1 - Text (FG) color of new section
# $2 - BG of new section
function section_separator() {
if [ $2 = $last_section_bg ]; then
PS1="${PS1}$(_CC ${1} ${2})${symbols[soft_separator]}"
else
if [ "$2" ]; then
PS1="${PS1}$(_CC ${last_section_bg} ${2})${symbols[hard_separator]}"
else
PS1="${PS1}${NORMAL}$(_CFG ${last_section_bg})${symbols[hard_separator]}${NORMAL}"
fi
fi
}

# $1 - Content
# $2 - Text (FG) color
# $3 - BG Color
function section(){
if [ $last_section_bg ]; then
$(section_separator $2 $3)
fi
last_section_bg=$3
PS1="${PS1}$(_CC ${2} ${3})${1}"
echo "$(_CC ${2} ${3})${1}"
}


# This function was modified from one found @ https://www.reddit.com/r/linux/comments/2uf5uu/this_is_my_bash_prompt_which_is_your_favorite/?st=jikgswh4&sh=371ba8bf
function _git_status() {
local unknown untracked stash clean ahead behind staged dirty diverged
unknown=$(_CC $BLUE $BG_DGREY)
untracked=$(_CC $GREEN $BG_DGREY)
stash=$(_CC $GREEN $BG_DGREY)
clean=$(_CC $GREEN $BG_DGREY)
ahead=$(_CC $YELLOW $BG_DGREY)
behind=$(_CC $YELLOW $BG_DGREY)
staged=$(_CC $CYAN $BG_DGREY)
dirty=$(_CC $RED $BG_DGREY)
diverged=$(_CC $RED $BG_DGREY)
# $1 - Default text (foreground) color
# $2 - Background color
function section_git_status() {
local default untracked stash clean ahead behind staged dirty diverged
default=$(_CC $1 $2)
untracked=$(_CC $GREEN $2)
stash=$(_CC $GREEN $2)
clean=$(_CC $GREEN $2)
ahead=$(_CC $YELLOW $2)
behind=$(_CC $YELLOW $2)
staged=$(_CC $CYAN $2)
dirty=$(_CC $RED $2)
diverged=$(_CC $RED $2)


branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
if [[ -n "$branch" ]]; then
git_status=$(git status 2> /dev/null)
# If nothing changes the color, we can spot unhandled cases.
color=$unknown
if [[ $git_status =~ 'Untracked files' ]]; then
color=$untracked
branch="${branch}?"
fi
if git stash show &>/dev/null; then
color=$stash
branch="${branch}+"
fi
if [[ $git_status =~ 'working directory clean' ]]; then
color=$clean
fi
if [[ $git_status =~ 'Your branch is ahead' ]]; then
color=$ahead
branch="${branch}>"
fi
if [[ $git_status =~ 'Your branch is behind' ]]; then
color=$behind
branch="${branch}<"
fi
if [[ $git_status =~ 'Changes to be committed' ]]; then
color=$staged
fi
if [[ $git_status =~ 'Changed but not updated' ||
$git_status =~ 'Changes not staged' ||
$git_status =~ 'Unmerged paths' ]]; then
color=$dirty
fi
if [[ $git_status =~ 'Your branch'.+diverged ]]; then
color=$diverged
branch="${branch}!"
fi
echo -n "${color}${symbols[git]}${branch}"
$(section_separator $1 $2)
last_section_bg=$2
PS1="${PS1}${default}${symbols[git]} $branch "
git_status=$(git status 2> /dev/null)
# If nothing changes the color, we can spot unhandled cases.
if [[ $git_status =~ 'Untracked files' ]]; then
PS1="${PS1}${untracked}${symbols[untracked]}"
fi
if git stash show &>/dev/null; then
PS1="${PS1}${stash}${symbols[stash]}"
fi
if [[ $git_status =~ 'Your branch is ahead' ]]; then
PS1="${PS1}${ahead}${symbols[ahead]}"
fi
if [[ $git_status =~ 'Your branch is behind' ]]; then
PS1="${PS1}${behind}${symbols[behind]}"
fi
if [[ $git_status =~ 'Changes to be committed' ]]; then
PS1="${PS1}${staged}${symbols[tick]}"
fi
if [[ $git_status =~ 'Changed but not updated' ||
$git_status =~ 'Changes not staged' ||
$git_status =~ 'Unmerged paths' ]]; then
PS1="${PS1}${dirty}${symbols[cross]}"
fi
if [[ $git_status =~ 'Your branch'.+diverged ]]; then
PS1="${PS1}${diverged}${symbols[enter]}"
fi
fi
}


set_prompt() {
local lec="$?"
if [ $COLOR_PROMPT = yes ]; then
if [ $lec -ne 0 ]; then
smilie="$(_CC $RED $BG_DGREY)${symbols[frownie]}"
local lec="$?"
local color=$GREEN
local bg=$BG_LBLUE
local smilie=${symbols[smilie]}
if [ $COLOR_PROMPT = yes ]; then
if [ $lec -ne 0 ]; then
color=$RED
smilie=${symbols[frownie]}
fi
PS1="${debian_chroot:+($debian_chroot)}Hi" #$(_CC $GREEN $BG_DGREY)\u $(_CC $LBLUE $BG_DGREY)\w$(_CC $DEFAULT $BG_DGREY)|${smilie}$(_CC $DEFAULT $BG_DGREY)|$(_git_status)${NORMAL}$(_CFG $DGREY)${symbols[hard_separator]}${NORMAL} "
#$(section $smilie $color $bg)
$(section "\\\\u" $GREEN $BG_GREY)
#$(section "\\\\w" $BLUE $BG_GREY)
#$(section_git_status $YELLOW $BG_LBLUE)
#$(section_separator)
else
smilie="$(_CC $GREEN $BG_DGREY)${symbols[smilie]}"
PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w\$ "
fi
PS1="${debian_chroot:+($debian_chroot)}$(_CC $GREEN $BG_DGREY)\u $(_CC $LBLUE $BG_DGREY)\w$(_CC $DEFAULT $BG_DGREY)|${smilie}$(_CC $DEFAULT $BG_DGREY)|$(_git_status)${NORMAL}$(_CFG $DGREY)${symbols[hard_separator]}${NORMAL} "
else
PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w\$ "
fi
}

PROMPT_COMMAND="set_prompt"
PROMPT_COMMAND="set_prompt; $PROMPT_COMMAND"

Loading…
Cancel
Save