zshrc.d/20-prompt.zrc
changeset 0 7215ca490221
child 7 c032d39eafcf
equal deleted inserted replaced
-1:000000000000 0:7215ca490221
       
     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