|
1 |
|
2 # You can use fast_hg_root from https://bitbucket.org/yaniv_aknin/fast_hg_root |
|
3 # or maybe use the command false if you don't use Mercurial at all. |
|
4 # (Override in $ZDOTLOCALDIR/zshrc) |
|
5 HG_ROOT_CMD=("hg" "root") |
|
6 export HG_ROOT_CMD |
|
7 |
|
8 |
|
9 ### Extended prompts |
|
10 |
|
11 function __prompt_path_color { |
|
12 local path_color |
|
13 if [[ -O "$PWD" ]]; then |
|
14 path_color="${fg_no_bold[magenta]}" |
|
15 elif [[ -w "$PWD" ]]; then |
|
16 path_color="${fg_no_bold[blue]}" |
|
17 else |
|
18 path_color="${fg_bold[red]}" |
|
19 fi |
|
20 print "%{$path_color%}" |
|
21 } |
|
22 |
|
23 # From http://stevelosh.com/blog/2010/02/my-extravagant-zsh-prompt/ |
|
24 function __prompt_char { |
|
25 __gitdir >/dev/null 2>/dev/null && echo '±' && return |
|
26 $HG_ROOT_CMD >/dev/null 2>/dev/null && echo '☿' && return |
|
27 echo '○' |
|
28 } |
|
29 |
|
30 function __hg_prompt_info { |
|
31 $HG_ROOT_CMD >/dev/null 2>/dev/null && |
|
32 hg prompt --angle-brackets " |
|
33 <HG patches: <patches|join( → )|pre_applied(%{$fg[yellow]%})|post_applied(%{$reset_color%})|pre_unapplied(%{$fg[cyan]%})|post_unapplied(%{$reset_color%})> |
|
34 >%BHG%b<(%{$fg[green]%}<status|modified|unknown>%{$reset_color%})><%{$fg[green]%}<update>%{$reset_color%}>\ |
|
35 < on %{$fg[magenta]%}<branch|quiet>%{$reset_color%}>\ |
|
36 < at %{$fg[yellow]%}<tags|%{$reset_color%}, %{$fg[yellow]%}>%{$reset_color%}>" 2>/dev/null |
|
37 } |
|
38 |
|
39 source $ZDOTDIR/tools/git-prompt.sh > /dev/null 2>&1 |
|
40 function __git_prompt_info { |
|
41 r=$(__git_ps1) |
|
42 if [ ! -z $r ]; then echo -e "\n%Bgit%b$r"; fi |
|
43 } |
|
44 |
|
45 function __prompt_set_dev { |
|
46 # Prompt complet sur 2 lignes, couleurs, avec un indicateur de dépôt git/hg |
|
47 local -a lines pline |
|
48 |
|
49 local red="%{$fg[red]%}" |
|
50 local cyan="%{$fg[cyan]%}" |
|
51 local reset="%{$reset_color%}" |
|
52 |
|
53 # 1re ligne |
|
54 pline+=( "%D{%m%d} " ) # Date |
|
55 pline+=( "$cyan%D{%H:%M}$reset " ) # Time |
|
56 pline+=( $(__prompt_path_color) ) # Couleur du chemin dynamique |
|
57 pline+=( "%~$reset" ) # Chemin (cwd) |
|
58 lines+=( ${(j::)pline} ) |
|
59 pline=() |
|
60 |
|
61 # 2e ligne |
|
62 pline+=( "[%B%n%b] " ) # Nom d'utilisateur |
|
63 pline+=( "$red%m$reset" ) # Nom de machine |
|
64 pline+=( $(__prompt_char) ) # Indicateur de dépôt (hg/git) |
|
65 pline+=( "%# " ) # Invite de commande |
|
66 lines+=( ${(j::)pline} ) |
|
67 |
|
68 export PS1=${(F)lines} |
|
69 } |
|
70 |
|
71 function __prompt_set_dev-mikael { |
|
72 # Prompt complet sur 2 ou 3 lignes, avec informations sur les dépôts git/hg |
|
73 local -a lines pline |
|
74 |
|
75 local red="%{$fg[red]%}" |
|
76 local cyan="%{$fg[cyan]%}" |
|
77 local reset="%{$reset_color%}" |
|
78 |
|
79 # 1re ligne |
|
80 pline+=( "%D{%m%d} " ) # Date |
|
81 pline+=( "$cyan%D{%H:%M}$reset " ) # Time |
|
82 pline+=( $(__prompt_path_color) ) # Couleur du chemin dynamique |
|
83 pline+=( "%~$reset" ) # Chemin (cwd) |
|
84 lines+=( ${(j::)pline} ) |
|
85 pline=() |
|
86 |
|
87 # 2e ligne |
|
88 pline+=( "[%B%n%b] " ) # Nom d'utilisateur |
|
89 pline+=( "$red%m$reset" ) # Nom de machine |
|
90 pline+=( "$(__hg_prompt_info)" ) # Informations de dépôt Mercurial |
|
91 pline+=( "$(__git_prompt_info)" ) # Informations de dépôt git |
|
92 pline+=( "%# " ) # Invite de commande |
|
93 lines+=( ${(j::)pline} ) |
|
94 |
|
95 export PS1=${(F)lines} |
|
96 } |
|
97 |
|
98 function precmd { |
|
99 case $_PROMPT_DEFINED in |
|
100 dev) |
|
101 __prompt_set_dev |
|
102 ;; |
|
103 dev-mikael) |
|
104 __prompt_set_dev-mikael |
|
105 ;; |
|
106 dev-vcsinfo) |
|
107 __precmd_vcsinfo |
|
108 ;; |
|
109 esac |
|
110 } |
|
111 |
|
112 function prompt_set_dev-vcsinfo { |
|
113 _PROMPT_DEFINED="dev-vcsinfo" |
|
114 source $ZDOTDIR/functions/zshrc_vcsinfo |
|
115 } |
|
116 |
|
117 function __prompt_unset_dev-vcsinfo { |
|
118 if [[ $_PROMPT_DEFINED == "dev-vcsinfo" ]]; then |
|
119 zstyle ':vcs_info:*' enable NONE |
|
120 unset RPS1 |
|
121 fi |
|
122 } |
|
123 |
|
124 function prompt_set_blackwhite { |
|
125 # Prompt complet sur 2 lignes, N&B |
|
126 __prompt_unset_dev-vcsinfo |
|
127 unsetopt prompt_subst |
|
128 |
|
129 export PS1="%D{%m%d %H:%M} %B%~%b |
|
130 [%B%n%b:%l] %S%m%s%# " |
|
131 |
|
132 export _PROMPT_DEFINED="blackwhite" |
|
133 } |
|
134 |
|
135 function prompt_set_color { |
|
136 # Prompt complet sur 2 lignes, couleurs |
|
137 __prompt_unset_dev-vcsinfo |
|
138 unsetopt prompt_subst |
|
139 |
|
140 PS1="%D{%m%d} %{$fg[cyan]%}%D{%H:%M}%{$reset_color%} " |
|
141 PS1=$PS1"%{$fg[magenta]%}%~%{$reset_color%} |
|
142 [%B%n%b:%l] %{$fg[red]%}%m%{$reset_color%}%# " |
|
143 export PS1 |
|
144 |
|
145 export _PROMPT_DEFINED="blackwhite" |
|
146 } |
|
147 |
|
148 function prompt_set_dev { |
|
149 __prompt_unset_dev-vcsinfo |
|
150 export _PROMPT_DEFINED="dev" |
|
151 } |
|
152 function prompt_set_dev-mikael { |
|
153 __prompt_unset_dev-vcsinfo |
|
154 export _PROMPT_DEFINED="dev-mikael" |
|
155 } |
|
156 |
|
157 |
|
158 # Invite de commande par défaut |
|
159 prompt_set_color |