Przeglądaj źródła

WIP: beginning git prompt status refactor

Do fewer echos, greps and pipes, do more && logical operators and continues.
Weiyi Lou 13 lat temu
rodzic
commit
4b50dcc049
1 zmienionych plików z 18 dodań i 13 usunięć
  1. 18 13
      zsh/omz-custom/cinaeco.zsh-theme

+ 18 - 13
zsh/omz-custom/cinaeco.zsh-theme

@@ -39,34 +39,39 @@ function git_prompt_info() {
 ## Override the default `git_prompt_status` function
 ## Override the default `git_prompt_status` function
 ## This one will try to print a symbol for each change listed in git status.
 ## This one will try to print a symbol for each change listed in git status.
 ## The old version only listed if each type existed or not.
 ## The old version only listed if each type existed or not.
+## Status is computed from the short version of git status that lists out
+##     xy filename1
+##     xy filename2
+## where x and y are statuses such as A (added), M (modified). Details in the
+## git-status manpage
 git_prompt_status() {
 git_prompt_status() {
   INDEX=$(git status -s 2> /dev/null)
   INDEX=$(git status -s 2> /dev/null)
   STATUS=""
   STATUS=""
-  echo $INDEX | while IFS= read line; do
-    if $(echo "$line" | grep '^?? ' &> /dev/null); then
-      STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNTRACKED"
-    fi
-    if $(echo "$line" | grep '^A  ' &> /dev/null); then
+  echo $INDEX | while IFS= read LINE; do
+    X=$LINE[1]
+    Y=$LINE[2]
+    [[ $X$Y == '??' ]] && STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNTRACKED" && continue
+    if [[ $X == 'A' || $Y == 'A' ]]; then
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_ADDED"
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_ADDED"
-    elif $(echo "$line" | grep '^M. ' &> /dev/null); then
+    elif [[ $X == 'M' ]] then
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_ADDED"
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_ADDED"
     fi
     fi
-    if $(echo "$line" | grep '^.M ' &> /dev/null); then
+    if $(echo "$LINE" | grep '^.M ' &> /dev/null); then
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_MODIFIED"
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_MODIFIED"
-    elif $(echo "$line" | grep '^AM ' &> /dev/null); then
+    elif $(echo "$LINE" | grep '^AM ' &> /dev/null); then
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_MODIFIED"
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_MODIFIED"
-    elif $(echo "$line" | grep '^ T ' &> /dev/null); then
+    elif $(echo "$LINE" | grep '^ T ' &> /dev/null); then
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_MODIFIED"
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_MODIFIED"
     fi
     fi
-    if $(echo "$line" | grep '^R  ' &> /dev/null); then
+    if $(echo "$LINE" | grep '^R  ' &> /dev/null); then
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_RENAMED"
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_RENAMED"
     fi
     fi
-    if $(echo "$line" | grep '^ D ' &> /dev/null); then
+    if $(echo "$LINE" | grep '^ D ' &> /dev/null); then
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_DELETED"
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_DELETED"
-    elif $(echo "$line" | grep '^AD ' &> /dev/null); then
+    elif $(echo "$LINE" | grep '^AD ' &> /dev/null); then
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_DELETED"
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_DELETED"
     fi
     fi
-    if $(echo "$line" | grep '^UU ' &> /dev/null); then
+    if $(echo "$LINE" | grep '^UU ' &> /dev/null); then
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNMERGED"
       STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNMERGED"
     fi
     fi
   done
   done