Bash git

Markdown Detected Guest 7 Views Size: 4.04 KB Posted on: Dec 6, 25 @ 8:30 PM

function parse_git_branch { if [ ! -d . ]; then return ''; fi

We pass in the magic token bash makes from [ and ] (^A and ^B probably)

        # so we can use them in our echo statement.

  #Bash 3.2 does not understand our \[ syntax for prompt escaping.. so
  #sadl, no colors on it... but do colors on 4.x
  if [ ${BASH_VERSINFO[0]} -ge 4 ]; then
      gitcolorprompt=yes
  fi

  if [ $gitcolorprompt-xx == 'yes-xx' ]; then
            RED="$1\e[0;31m$2"
         YELLOW="$1\e[33m$2"
          GREEN="$1\e[32m$2"
           BLUE="$1\e[34m$2"
      LIGHT_RED="$1\e[31m$2"
           CYAN="$1\e[36m$2"
     LIGHT_CYAN="$1\e[1;36m$2"
    LIGHT_GREEN="$1\e[1;32m$2"
          WHITE="$1\e[1;37m$2"
     LIGHT_GRAY="$1\e[0;37m$2"
     COLOR_NONE="$1\e[0m$2"

 fi

if git rev-parse --git-dir &> /dev/null; then git_status="$(git status 2> /dev/null)" branch_pattern="^#? ?On branch ([^${IFS}])" detached_branch_pattern="Not currently on any branch" remote_pattern="Your branch is (.) of" diverge_pattern="Your branch and (.*) have diverged" changed_pattern="Changes not staged for commit" untracked_pattern="Untracked files:" staged_pattern="Changes to be committed" if [[ ${git_status} =~ "Changed but not updated" ]]; then

state="${RED}⚡"

     state="⚡"
  fi
  if [[ ${git_status} =~ ${changed_pattern} ]]; then
      state="${state}Ⓜ "
  fi
  if [[ ${git_status} =~ ${untracked_pattern} ]]; then
      state="${state}Ⓤ "
  fi
  if [[ ${git_status} =~ ${staged_pattern} ]]; then
      #state="${state}Ⓢ "
      state="${state}✇"
  fi
  # add an else if or two here if you want to get more specific
  if [[ ${git_status} =~ ${remote_pattern} ]]; then
      if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
          #remote="${YELLOW}↑"
          remote="↑"
      else
          #remote="${YELLOW}↓"
          remote="↓"
      fi
  fi
  if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    #remote="${YELLOW}↕"
    remote="↕"
  fi
  if [[ ${git_status} =~ ${branch_pattern} ]]; then
      branch=${BASH_REMATCH[1]}
  elif [[ ${git_status} =~ ${detached_branch_pattern} ]]; then
      branch="NO BRANCH"
      #branch="${YELLOW}NO BRANCH"
  fi

if [[ ${#state} -gt "0" || ${#remote} -gt "0" ]]; then
    s=" "
fi
echo -e "${CYAN}[${LIGHT_GRAY}${branch}${s}${remote}${state}${changed}${CYAN}] "
#echo -e "[${branch}${s}${remote}${state}] "

fi PROMPT_RECURSE=0 }

if [ "$PS1" ]; then if [ $UID -eq "0" ]; then case "$TERM" in xterm|rxvt|screen) PS1='\n[\e]2;\u@\h:\w\a\e[1m\e[31m][\e[31m]\u[\e[37m]@[\e[35m]\h[\e[37m]:[\e[32m]\w[\e[33m][\e[31m] #[\e[0m] ' ;; ) PS1='[!]\u@\h \w# ' ;; esac else case "$TERM" in xterm|rxvt*|screen)

strings like \342\224\224 define UTF multi-byte chars. but we also have to wrap all but one piece

    # of multi-byte chars in \[ non-printing \]  or line-wrapping messes up.
#PS1='\n[\!]\[\e]2;\u@\h:\w\a\e[1m\e[33m\]\[\e[36m\]\u\[\e[37m\]@\[\e[35m\]\h\[\e[37m\]:\[\e[32m\]\w\[\e[33m\]\[\e[33m\]>\[\e[0m\] \[\e[37m\]$(parse_git_branch "\[" "\]" 2>/dev/null)\[\e[0m\]'
    sadness='$([[ $? != 0 ]] && echo "[\[\033[0;31m\]\[\342\234\]\227\[\033[0;37m\]]")'
    tube1="\[\342\224\]\214\[\342\224\]\200"
    tube2="\[\e[37m\]\[\342\224\]\224\[\342\224\]\200\[\342\224\]\200\[\342\225\]\274"
    settitle="\[\e]2;\u@\h:\w\a\e[1m\e[37m\]"
PS1="$settitle\n$tube1\[\033[0;37m\]$sadness[\[\e[0;33m\]\u\[\e[37m\]@\[\e[36m\]\h\[\e[37m\]][\[\e[0;32m\]\[\e[32m\]\w\[\e[33m\]\[\e[0;37m\]]\[\e[0m\] \[\e[37m\]\$(parse_git_branch \"\[\" \"\]\" 2>/dev/null)\n$tube2 \[\e[0m\]"
;;
  *)
  PS1='[\!]\u@\h \w> '
  ;;
  esac

fi fi

export PS1

Raw Paste

Comments 0
Login to post a comment.
  • No comments yet. Be the first.
Login to post a comment. Login or Register
We use cookies. To comply with GDPR in the EU and the UK we have to show you these.

We use cookies and similar technologies to keep this website functional (including spam protection via Google reCAPTCHA or Cloudflare Turnstile), and — with your consent — to measure usage and show ads. See Privacy.