]> git.alrj.org Git - zsh.d.git/blobdiff - S60_git
Add a wrapper for mc to stay in current directory upon exit
[zsh.d.git] / S60_git
diff --git a/S60_git b/S60_git
index bb2c6f0cf5434c7364bc6b6e9ed0113f658836e4..1061cf575a0a04d47412070ac157bdf7cc2b71fa 100644 (file)
--- a/S60_git
+++ b/S60_git
@@ -1,10 +1,12 @@
 #! /usr/bin/zsh
 
+# Those can be used, for instance to construct the prompt:
 __ZSH_GIT_BASEDIR=""
 __ZSH_GIT_SUBDIR=""
 __ZSH_GIT_BRANCH=""
 __ZSH_GIT_ACTION=""
 __ZSH_GIT_STATUS=""
+
 __ZSH_GIT_VARS_INVALID=1
 __ZSH_GIT_STATUS_INVALID=1
 
@@ -12,6 +14,7 @@ __ZSH_GIT_STATUS_INVALID=1
 git_chpwd() {
   # On cd, invalidate git status in prompt
   __ZSH_GIT_VARS_INVALID=1
+  __ZSH_GIT_BASEDIR=""
 }
 
 
@@ -27,25 +30,31 @@ git_preexec() {
   __ZSH_GIT_STATUS_INVALID=1
 }
 
-
 git_get_status() {
     # Return only git status
     local gitstat gitstatus
 
-    gitstat=$(git status 2> /dev/null | grep '\(# Untracked\|# Changes\|# Changed but not updated:\)')
+    gitstat=$(LANG=C git status 2> /dev/null | grep '\(Untracked\|Changes\|Changed but not updated:\)')
+    # 'fix for mcedit parser
     gitstatus=""
 
-    if [[ $(echo ${gitstat} | grep -c "^Changes to be committed:$") > 0 ]]; then
-      gitstatus='+'
+    if [[ $(echo ${gitstat} | grep -c "^Changes to be committed:$") > 0 ]]; then
+      gitstatus=''
     fi
 
-    if [[ $(echo ${gitstat} | grep -c "^\# Changed but not updated:$") > 0 || \
-          $(echo ${gitstat} | grep -c "^\# Changes not staged for commit:$") > 0 ]]; then
-      gitstatus="${gitstatus}!"
+    if [[ $(echo ${gitstat} | grep -c "^Changed but not updated:$") > 0 || \
+          $(echo ${gitstat} | grep -c "^Changes not staged for commit:$") > 0 ]]; then
+      gitstatus="${gitstatus}"
     fi
 
-    if [[ $(echo ${gitstat} | grep -c "^# Untracked files:$") > 0 ]]; then
-      gitstatus="${gitstatus}?"
+    if [[ $(echo ${gitstat} | grep -c "^Untracked files:$") > 0 ]]; then
+      gitstatus="${gitstatus}★"
+    fi
+
+    if [[ -z $gitstatus ]]; then
+      gitstatus="%{${fg_bold[green]}%}✔%{$reset_color%}"
+    else
+      gitstatus="%{${fg_bold[yellow]}%}$gitstatus%{$reset_color%}"
     fi
 
     echo $gitstatus
@@ -53,40 +62,16 @@ git_get_status() {
 
 
 git_parse() {
-    # psvar[5] == current action (merge, rebase, ...)
-    # psvar[6] == current branch
-    # psvar[7] == repository base directory
-    # psvar[8] == current subdir into repository
-    # psvar[9] == status (untracked, unstaged, staged)
-
     local git_dir ref base_dir sub_dir action branch gitstat gitstatus
 
-
     # If nothing has been invalidated
     if [[ "${__ZSH_GIT_VARS_INVALID}" == "0" && "${__ZSH_GIT_STATUS_INVALID}" == "0" ]]; then
-
-      # reuse previous values
-      psvar[5]=${__ZSH_GIT_ACTION}
-      psvar[6]=${__ZSH_GIT_BRANCH}
-      psvar[7]=${__ZSH_GIT_BASEDIR}
-      psvar[8]=${__ZSH_GIT_SUBDIR}
-      psvar[9]=${__ZSH_GIT_STATUS}
-
       return
     fi
 
     # If only status has been invalidated
     if [[ "${__ZSH_GIT_VARS_INVALID}" == "0" && "${__ZSH_GIT_STATUS_INVALID}" == "1" ]]; then
-
-      # reuse previous values
-      psvar[5]=${__ZSH_GIT_ACTION}
-      psvar[6]=${__ZSH_GIT_BRANCH}
-      psvar[7]=${__ZSH_GIT_BASEDIR}
-      psvar[8]=${__ZSH_GIT_SUBDIR}
-
       __ZSH_GIT_STATUS=$(git_get_status)
-      psvar[9]=${__ZSH_GIT_STATUS}
-
       __ZSH_GIT_STATUS_INVALID=0
       return
     fi
@@ -128,28 +113,18 @@ git_parse() {
       action="-merge"
       branch="$ref"
     else
-      test -f "$git_dir/BISECT_LOG" && psvar[3]="bisect"
+      test -f "$git_dir/BISECT_LOG" && action="-bisect"
       branch="$(git symbolic-ref HEAD 2>/dev/null)" || \
         branch="$(git describe --exact-match HEAD 2>/dev/null)" || \
         branch="$(cut -c1-7 "$git_dir/HEAD")..."
     fi
 
-    # Status
-    gitstatus=`git_get_status`
-
-    # Got here, we're in git
-    psvar[5]=${action}
-    psvar[6]=${branch#refs/heads/}
-    psvar[7]=${base_dir}
-    psvar[8]=${sub_dir}
-    psvar[9]=${gitstatus}
-    
-    # Save for next time
+
     __ZSH_GIT_BASEDIR="${base_dir}"
     __ZSH_GIT_SUBDIR="${sub_dir}"
     __ZSH_GIT_BRANCH="${branch#refs/heads/}"
     __ZSH_GIT_ACTION="${action}"
-    __ZSH_GIT_STATUS="${gitstatus}"
+    __ZSH_GIT_STATUS=`git_get_status`
 
     __ZSH_GIT_VARS_INVALID=0
     __ZSH_GIT_STATUS_INVALID=0