diff -r 000000000000 -r 7215ca490221 zshrc.d/20-prompt.zrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zshrc.d/20-prompt.zrc Sat Jul 14 19:20:57 2012 +0200 @@ -0,0 +1,159 @@ + +# You can use fast_hg_root from https://bitbucket.org/yaniv_aknin/fast_hg_root +# or maybe use the command false if you don't use Mercurial at all. +# (Override in $ZDOTLOCALDIR/zshrc) +HG_ROOT_CMD=("hg" "root") +export HG_ROOT_CMD + + +### Extended prompts + +function __prompt_path_color { + local path_color + if [[ -O "$PWD" ]]; then + path_color="${fg_no_bold[magenta]}" + elif [[ -w "$PWD" ]]; then + path_color="${fg_no_bold[blue]}" + else + path_color="${fg_bold[red]}" + fi + print "%{$path_color%}" +} + +# From http://stevelosh.com/blog/2010/02/my-extravagant-zsh-prompt/ +function __prompt_char { + __gitdir >/dev/null 2>/dev/null && echo '±' && return + $HG_ROOT_CMD >/dev/null 2>/dev/null && echo '☿' && return + echo '○' +} + +function __hg_prompt_info { + $HG_ROOT_CMD >/dev/null 2>/dev/null && + hg prompt --angle-brackets " + +>%BHG%b<(%{$fg[green]%}%{$reset_color%})><%{$fg[green]%}%{$reset_color%}>\ +< on %{$fg[magenta]%}%{$reset_color%}>\ +< at %{$fg[yellow]%}%{$reset_color%}>" 2>/dev/null +} + +source $ZDOTDIR/tools/git-prompt.sh > /dev/null 2>&1 +function __git_prompt_info { + r=$(__git_ps1) + if [ ! -z $r ]; then echo -e "\n%Bgit%b$r"; fi +} + +function __prompt_set_dev { + # Prompt complet sur 2 lignes, couleurs, avec un indicateur de dépôt git/hg + local -a lines pline + + local red="%{$fg[red]%}" + local cyan="%{$fg[cyan]%}" + local reset="%{$reset_color%}" + + # 1re ligne + pline+=( "%D{%m%d} " ) # Date + pline+=( "$cyan%D{%H:%M}$reset " ) # Time + pline+=( $(__prompt_path_color) ) # Couleur du chemin dynamique + pline+=( "%~$reset" ) # Chemin (cwd) + lines+=( ${(j::)pline} ) + pline=() + + # 2e ligne + pline+=( "[%B%n%b] " ) # Nom d'utilisateur + pline+=( "$red%m$reset" ) # Nom de machine + pline+=( $(__prompt_char) ) # Indicateur de dépôt (hg/git) + pline+=( "%# " ) # Invite de commande + lines+=( ${(j::)pline} ) + + export PS1=${(F)lines} +} + +function __prompt_set_dev-mikael { + # Prompt complet sur 2 ou 3 lignes, avec informations sur les dépôts git/hg + local -a lines pline + + local red="%{$fg[red]%}" + local cyan="%{$fg[cyan]%}" + local reset="%{$reset_color%}" + + # 1re ligne + pline+=( "%D{%m%d} " ) # Date + pline+=( "$cyan%D{%H:%M}$reset " ) # Time + pline+=( $(__prompt_path_color) ) # Couleur du chemin dynamique + pline+=( "%~$reset" ) # Chemin (cwd) + lines+=( ${(j::)pline} ) + pline=() + + # 2e ligne + pline+=( "[%B%n%b] " ) # Nom d'utilisateur + pline+=( "$red%m$reset" ) # Nom de machine + pline+=( "$(__hg_prompt_info)" ) # Informations de dépôt Mercurial + pline+=( "$(__git_prompt_info)" ) # Informations de dépôt git + pline+=( "%# " ) # Invite de commande + lines+=( ${(j::)pline} ) + + export PS1=${(F)lines} +} + +function precmd { + case $_PROMPT_DEFINED in + dev) + __prompt_set_dev + ;; + dev-mikael) + __prompt_set_dev-mikael + ;; + dev-vcsinfo) + __precmd_vcsinfo + ;; + esac +} + +function prompt_set_dev-vcsinfo { + _PROMPT_DEFINED="dev-vcsinfo" + source $ZDOTDIR/functions/zshrc_vcsinfo +} + +function __prompt_unset_dev-vcsinfo { + if [[ $_PROMPT_DEFINED == "dev-vcsinfo" ]]; then + zstyle ':vcs_info:*' enable NONE + unset RPS1 + fi +} + +function prompt_set_blackwhite { + # Prompt complet sur 2 lignes, N&B + __prompt_unset_dev-vcsinfo + unsetopt prompt_subst + + export PS1="%D{%m%d %H:%M} %B%~%b +[%B%n%b:%l] %S%m%s%# " + + export _PROMPT_DEFINED="blackwhite" +} + +function prompt_set_color { + # Prompt complet sur 2 lignes, couleurs + __prompt_unset_dev-vcsinfo + unsetopt prompt_subst + + PS1="%D{%m%d} %{$fg[cyan]%}%D{%H:%M}%{$reset_color%} " + PS1=$PS1"%{$fg[magenta]%}%~%{$reset_color%} +[%B%n%b:%l] %{$fg[red]%}%m%{$reset_color%}%# " + export PS1 + + export _PROMPT_DEFINED="blackwhite" +} + +function prompt_set_dev { + __prompt_unset_dev-vcsinfo + export _PROMPT_DEFINED="dev" +} +function prompt_set_dev-mikael { + __prompt_unset_dev-vcsinfo + export _PROMPT_DEFINED="dev-mikael" +} + + +# Invite de commande par défaut +prompt_set_color