X-Git-Url: https://git.madduck.net/etc/zsh.git/blobdiff_plain/1824e0507f2f636d27e03865fff96820c1b93192..d1a7abb4d44890ae6605a73d246b2eaa20a09c08:/.zsh/zshrc/60_vcsprompt?ds=sidebyside

diff --git a/.zsh/zshrc/60_vcsprompt b/.zsh/zshrc/60_vcsprompt
index 07ea293..cf90110 100644
--- a/.zsh/zshrc/60_vcsprompt
+++ b/.zsh/zshrc/60_vcsprompt
@@ -26,9 +26,10 @@ __git_get_reporoot()
 __git_get_branch()
 {
   # return the name of the git branch we're on
-  local ref
-  ref=$(git --git-dir="$PWD" symbolic-ref -q HEAD 2>/dev/null \
-     || git --git-dir="$PWD" name-rev --name-only HEAD 2>/dev/null) || return 1
+  local ref gitdir
+  gitdir="$(git rev-parse --git-dir)"
+  ref=$(git --git-dir="$gitdir" symbolic-ref -q HEAD 2>/dev/null \
+     || git --git-dir="$gitdir" name-rev --name-only HEAD 2>/dev/null) || return 1
   echo "${ref#refs/heads/}"
 }
 
@@ -157,12 +158,19 @@ __vcs_set_prompt_variables()
         { error "could not determine git repository root"; return 1 }
       branch="$(__git_get_branch)" ||
         { error "could not determine git branch"; return 1 }
-      eval set -- $(__vcs_get_prompt_path_components "$reporoot" "$branch")
-      if [ -d "$GIT_DIR" ]; then
-        # poor man's replace until I find out how to do named dirs properly
-        # here:
-        local _D="${GIT_DIR/$HOME/~}"
-        set -- "$_D" "$2" "${${1#$_D}%/}"
+      if [ -n "$VCSH_REPO_NAME" ]; then
+        # if vcsh is used to get a subshell, then the repo root is the home
+        # directory, but we want to indicate the vcsh context too:
+        eval set -- $(__vcs_get_prompt_path_components "$HOME" "$branch")
+        set -- "%Svcsh:$VCSH_REPO_NAME%s" "$2" "$3"
+      else
+        eval set -- $(__vcs_get_prompt_path_components "$reporoot" "$branch")
+        if [ -d "$GIT_DIR" ]; then
+          # poor man's replace until I find out how to do named dirs properly
+          # here:
+          local _D="${GIT_DIR/$HOME/~}"
+          set -- "$_D" "$2" "${${1#$_D}%/}"
+        fi
       fi
       ;;
     hg)
@@ -192,7 +200,7 @@ __vcs_set_prompt_variables()
       return
   esac
 
-  psvar[1,3]=($1 $2 $3)
+  psvar[1,3]=(${(%)1} ${(%)2} ${(%)3})
 }
 
 __vcs_print_preprompt()