title: how to migrate my bash prompt to zsh
body: <p>As of some time now I have been very tempted to switch from bash to zsh.
  There is just one problem, I am very picky about my prompt. I use
  the terminal all day and it took me a long time to get my prompt to
  look and behave the way I want it to. By the way, I put it together
  from different sources and a bit of my own stuff and it may contain
  errors or not properly written code. All I want to know is if someone
  knows the code that I can paste into my zshrc that would give me the
  exact same prompt. </p>
  
  <p>The two features that I really enjoy is the variable length working directory
  that gets adjusted if pwd is too long and the directory separator slashes having
  different color then the dir names. This prompt also sets a dynamic terminal title.</p>
  
  <p>I could not post a picture because of some reputation
  or something but here is the code.</p>
  
  <pre><code>my_prompt()
  {       
      local NONE="\[\033[0m\]"
      local COLOR1="\[\033[0;30m\]"
      local COLOR2="\[\033[0;31m\]"
      local COLOR3="\[\033[0;32m\]"
      local COLOR4="\[\033[0;33m\]"
      local COLOR5="\[\033[0;34m\]"
      local COLOR6="\[\033[0;35m\]"
      local COLOR7="\[\033[0;36m\]"
      local COLOR8="\[\033[0;37m\]"
      local COLOR9="\[\033[1;30m\]"
      local COLOR10="\[\033[1;31m\]"
      local COLOR11="\[\033[1;32m\]"
      local COLOR12="\[\033[1;33m\]"
      local COLOR13="\[\033[1;34m\]"
      local COLOR14="\[\033[1;35m\]"
      local COLOR15="\[\033[1;36m\]"
      local COLOR16="\[\033[1;37m\]"
  
      # How many characters of the $PWD should be kept
      local PWDLEN=55
      ## Indicate that there has been dir truncation
      local TRUNC=".."
      local DIR=${PWD##*/}
      PWDLEN=$(( ( PWDLEN &lt; ${#DIR} ) ? ${#DIR} : PWDLEN ))
      TITLE_PWD=${PWD/#$HOME/\~/}
      local pwdoffset=$(( ${#TITLE_PWD} - PWDLEN ))
      if [ ${pwdoffset} -gt "0" ]
      then
          TITLE_PWD=${TITLE_PWD:$pwdoffset:$PWDLEN}
          TITLE_PWD=${TRUNC}/${TITLE_PWD#*/}
      fi  
  
      local DIR_SEP_COLOR=$COLOR10
      local DIR_COLOR=$COLOR5
      local HOSTNAME_COLOR=$COLOR5
      local AT_COLOR=$COLOR10
      local USER_COLOR=$COLOR5
  
      IN=$TITLE_PWD
      arr=$(echo $IN | tr "/" "\n")
  
      unset NEWDIR
      for x in $arr
      do  
          if [ "$x" == "~" ]
          then
                  NEWDIR="$NEWDIR$DIR_COLOR$x"
          else
                  NEWDIR="$NEWDIR$DIR_SEP_COLOR/$DIR_COLOR$x"
          fi                                                        
      done
  
  
      TITLEBAR='\[\033]0;\u@\h:${TITLE_PWD}\007\]'
    MYPS1="${USER_COLOR}\u${AT_COLOR}@${HOSTNAME_COLOR}${HOSTNAME}$DIR_SEP_COLOR:${DIR_COLOR}${NEWDIR}${NONE}"
  
      PS1="${TITLEBAR}${MYPS1}${COLOR12}»${NONE} "
  }
  PROMPT_COMMAND=my_prompt
  </code></pre>
  
  <p>another thing is that I do not like to do something like</p>
  
  <pre><code>echo \`pwd` | grep "/"
  </code></pre>
  
  <p>to get the slashes different color because I would also like to be able to change the color of the directory names as well </p>
  
  <p><strong>EDIT and ANSWER:</strong> </p>
  
  <p>Thank you Simont for your answer. I think your criticism of me not being able to do a search was the exact slap and motivation I needed to get started :) 
  basically I used link number 2 <a href="https://stackoverflow.com/questions/16147173/command-prompt-directory-styling/16214977#16214977">multi color path in prompt</a>  </p>
  
  <p>to get started. I came up with the following, its not perfect (i.e. random colors ... ) 
  but it is a good starting template.
  The following is my current .zshrc :</p>
  
  <pre><code>prompt_working_dir() {
  
     # How many characters of the $PWD should be kept
     local PWDLEN=55
     ## Indicate that there has been dir truncation
     local TRUNC=".."
     local DIR=${PWD##*/}
     local PWDLEN=$(( ( PWDLEN &lt; ${#DIR} ) ? ${#DIR} : PWDLEN ))
     local TITLE_PWD=${PWD/#$HOME/\~/}
     local pwdoffset=$(( ${#TITLE_PWD} - PWDLEN ))
     if [ ${pwdoffset} -gt "0" ]
     then
        TITLE_PWD=${TITLE_PWD:$pwdoffset:$PWDLEN}
        TITLE_PWD=${TRUNC}/${TITLE_PWD#*/}
     fi  
  
     IN=$TITLE_PWD
     arr=(${(s:/:)IN})
     unset NEWDIR
  
     if [ "$arr[1]" "==" "~" ]
     then
        NEWDIR="%{$fg[blue]%}$arr[1]"
        #delete 1st element
        arr[1]=()
        for x in $arr
        do
           NEWDIR="${NEWDIR}%{$fg_bold[cyan]%}/%{$reset_color%}%{$fg[blue]%}$x"
        done
     elif [ "$arr[1]" "==" ".." ]
     then
        NEWDIR="%{$fg[blue]%}$x%{$fg_bold[cyan]%}/"
        #delete 1st element
        arr[1]=()
        for x in $arr
        do
           NEWDIR="${NEWDIR}%{$reset_color%}%{$fg[blue]%}$x%{$fg_bold[cyan]%}/"
        done
     else
        for x in $arr
        do
            NEWDIR="${NEWDIR}%{$fg_bold[cyan]%}/%{$reset_color%}%{$fg[blue]%}$x"
        done
     fi  
  
     echo "${NEWDIR}"
  
     unset PWDLEN
     unset TRUNC
     unset DIR
     unset PWDLEN
     unset TITLE_PWD                                                            
     unset pwdoffset 
     unset IN
     unset arr
  }      
  
  
      setopt PROMPT_SUBST
      autoload -U colors &amp;&amp; colors
  
      # set window title to user@host %directory-----------
      precmd () {print -Pn "\e]0;%n@%M: %~\a"}
  
      SEP=":"
      PROMPT='%{$fg[blue]%}%m%{$reset_color%}'\
      '%{$fg_bold[cyan]%}@%{$reset_color%}'\
      '%{$fg[blue]%}%n%{$reset_color%}'\
      '%{$fg_bold[cyan]%}$SEP%{$reset_color%}'\
      '$(prompt_working_dir)%{$reset_color%}'\
      '%{$fg_bold[cyan]%}»%{$reset_color%} '
  </code></pre>