Browse Source

a better way to deal with git prompt

Von Random 2 weeks ago
parent
commit
366200d3e8
1 changed files with 15 additions and 18 deletions
  1. 15
    18
      zshrc

+ 15
- 18
zshrc View File

@@ -72,12 +72,12 @@ bindkey '^x^e'    edit-command-line
72 72
 # }}}
73 73
 # {{{ prompt
74 74
 prompt_ln1='[ %(!.%F{red}.%F{black})%n%f %m:%F{black}%d%f ]'
75
-prompt_ln2=$'\n''%(!.%F{red}.%F{black})>%f '
75
+prompt_ln2=$'\n%(!.%F{red}.%F{black})>%f '
76 76
 prompt_state_file="/tmp/zsh_gitstatus_$$.tmp"
77 77
 PROMPT="$prompt_ln1$prompt_ln2"
78
-PROMPT2='%b%f%_%(!.%F{red}.%F{black})>%f%b '
79
-PROMPT3='%b%f?%(!.%F{red}.%F{black})#%f%b '
80
-PROMPT4='%b%f+%N:%i%(!.%F{red}.%F{black})>%f%b '
78
+PROMPT2='%_%(!.%F{red}.%F{black})>%f '
79
+PROMPT3='?%(!.%F{red}.%F{black})#%f '
80
+PROMPT4='+%N:%i%(!.%F{red}.%F{black})>%f '
81 81
 precmd.title() {
82 82
     case $TERM in
83 83
         (screen*) printf '\033k%s\033\'  ${HOST%%.*};;
@@ -96,8 +96,6 @@ precmd.is_git_repo() {
96 96
     return 1
97 97
 }
98 98
 precmd.git() {
99
-    precmd.is_git_repo || return 0
100
-
101 99
     typeset raw_status
102 100
     raw_status="$(flock -w 0 $prompt_state_file git --no-optional-locks status --porcelain -bu 2>/dev/null)"
103 101
     (($?)) && return 0
@@ -119,31 +117,30 @@ precmd.git() {
119 117
     (( unmerged_count  )) && git_status+="%F{magenta}*$unmerged_count"
120 118
     [[ -z $git_status  ]] && git_status="%F{green}ok"
121 119
 
122
-    printf ' { %s \ue0a0 %s%%f }' $branch_info $git_status
120
+    printf ' { %s \ue0a0 %s%%f }' $branch_info $git_status > $prompt_state_file
123 121
 }
124 122
 precmd.prompt() {
125
-    if (($#)); then
126
-        PROMPT="$prompt_ln1$prompt_git_data$prompt_ln2"
127
-    else
128
-        PROMPT="$prompt_ln1$prompt_ln2"
129
-    fi
123
+    PROMPT="$prompt_ln1$1$prompt_ln2"
130 124
 }
131 125
 precmd.git_update() {
132
-    precmd.git > $prompt_state_file
126
+    precmd.git
133 127
     kill -s USR1 $$
134 128
 }
135 129
 precmd() {
136 130
     precmd.title
137
-    precmd.prompt
138
-    precmd.git_update &!
131
+    if precmd.is_git_repo; then
132
+        precmd.prompt $' { \ue0a0 }'
133
+        precmd.git_update &!
134
+    else
135
+        precmd.prompt
136
+    fi
139 137
 }
140 138
 TRAPUSR1() {
141
-    prompt_git_data="$(<$prompt_state_file)"
142
-    precmd.prompt 1
139
+    precmd.prompt "$(<$prompt_state_file)"
143 140
     zle && zle reset-prompt
144 141
 }
145 142
 TRAPEXIT() {
146
-    [[ -r $prompt_state_file ]] && rm $prompt_state_file
143
+    [[ -f $prompt_state_file ]] && rm $prompt_state_file
147 144
 }
148 145
 # }}}
149 146
 # {{{ aliases

Loading…
Cancel
Save