]> gitweb.pimeys.fr Git - config-20-100.git/blobdiff - .bashrc
On ne hardcode plus les couleurs. Ça permet de les changer dans le .bashrc.local
[config-20-100.git] / .bashrc
diff --git a/.bashrc b/.bashrc
index becaeb53c24a2d3290e770fb64ea016d6e9b48e8..041f2f9dd4e2009c77c3c90cd10d253f5bd8ad11 100644 (file)
--- a/.bashrc
+++ b/.bashrc
@@ -44,35 +44,42 @@ fi
 #~# # Définition de fonction pour pouvoir afficher dans le prompt
 #~# # des infos quand on est dans un dépôt versionné
 #~# 
+#~# find_up () {
+#~#     path="$1"
+#~#     shift 1
+#~#     while [[ "`readlink -f -- \"$path\"`" != "/" ]];
+#~#     do
+#~#         find "$path"  -maxdepth 1 -mindepth 1 "$@"
+#~#         path=${path}/..
+#~#     done
+#~# }
+#~# 
 #~# get_vcs_info () {
 #~#     # Donne les infos sur le dépôt VCS courant.
-#~#     # priorité à git, puis darcs
-#~#     local LBRANCH LTYPE BRANCH TYPE violet orange vert
-#~#     violet="\[\e[35m\]"
-#~#     orange="\[\e[33m\]"
-#~#     vert="\[\e[32m\]"
-#~#     nocolor="\[\e[0m\]"
-#~#     declare -a TYPE
-#~#     declare -a BRANCH
-#~#     TYPE[0]="git"
-#~#     TYPE[1]="mercurial"
-#~#     TYPE[2]="darcs"
-#~#     TYPE[3]="svn"
-#~#     BRANCH[0]='git branch 2>/dev/null | sed -r "s/^[^*].*$//" | paste -s -d "" | sed -r "s/^[*] //"'
-#~#     BRANCH[1]='hg branch 2>/dev/null'
-#~#     BRANCH[2]="darcs show repo 2>/dev/null| egrep '^ *Cache' | sed 's@.*/\([^/]*\),.*@\1@'"
-#~#     BRANCH[3]="svn info 2>/dev/null | head -n 6 | tail -n 1"
-#~#     for i in $(seq 0 $((${#BRANCH[*]}-1))); do
-#~#         LBRANCH=$(eval "${BRANCH[$i]}")
-#~#         if [ -n "$LBRANCH" ]; then
-#~#            LTYPE="${TYPE[$i]}"
-#~#            break
-#~#         fi
-#~#     done
-#~#     if [ -n "$LTYPE" ];
-#~#     then
+#~#     local LBRANCH LTYPE BRANCH TYPE DIR
+#~#     declare -a DIR
+#~#     declare -A TYPE
+#~#     declare -A BRANCH
+#~#     DIR[0]=".git"
+#~#     DIR[1]=".hg"
+#~#     DIR[2]="_darcs"
+#~#     DIR[3]=".svn"
+#~#     TYPE[.git]="git"
+#~#     TYPE[.hg]="mercurial"
+#~#     TYPE[_darcs]="darcs"
+#~#     TYPE[.svn]="svn"
+#~#     BRANCH[.git]='git branch 2>/dev/null | sed -r "s/^[^*].*$//" | paste -s -d "" | sed -r "s/^[*] //"'
+#~#     BRANCH[.hg]='hg branch 2>/dev/null'
+#~#     BRANCH[_darcs]="darcs show repo 2>/dev/null| egrep '^ *Cache' | sed 's@.*/\([^/]*\),.*@\1@'"
+#~#     BRANCH[.svn]="svn info 2>/dev/null | head -n 6 | tail -n 1"
+#~# 
+#~#     DIR=$(eval "find_up \"$PWD\" -name \"\"$(printf -- ' -o -name "%s"' "${DIR[@]}") | head -n 1")
+#~#     if [ -n "$DIR" ]; then
+#~#         DIR=$(basename "$DIR")
+#~#         LBRANCH=$(eval "${BRANCH[$DIR]}")
+#~#         LTYPE="${TYPE[$DIR]}"
 #~#         if [ "$color_prompt" = yes ]; then
-#~#             VCS_info="${nocolor}${violet}(${nocolor}$LTYPE${violet})-${violet}[${vert}$LBRANCH${violet}]${nocolor}"
+#~#             VCS_info="${nocolor}${vcs_symbols_color}(${nocolor}$LTYPE${vcs_symbols_color})-${vcs_symbols_color}[${vcs_branch_color}$LBRANCH${vcs_symbols_color}]${nocolor}"
 #~#         else
 #~#             VCS_info="($LTYPE)-[$LBRANCH]"
 #~#         fi
@@ -83,6 +90,7 @@ fi
 #~#     fi
 #~# }
 
+
 # Pour avoir le bon umask en fonction du dossier où on se trouve
 # L'umask définit avec quel droits un fichier est créé.
 # Quand on écrit dans un dossier et qu'on veut que, par défaut,
@@ -90,7 +98,11 @@ fi
 # Rien de spécial n'arrivera si vous n'avez pas le fichier .umaskrc
 function cd {
         builtin cd "$@"
-        [ -f ~/.umaskrc ] &&  umask $(/usr/bin/awk 'BEGIN {pwd=ENVIRON["PWD"]; a=length(pwd); cmax=0} {if($1==pwd) {MASK=$2;exit}; c=length($1); if(c>a) {next}; if(substr(pwd,0,c)==$1 && c > cmax) {cmax=c; MASK=$2}} END {print MASK}' ~/.umaskrc) >/dev/null
+        if [ -f ~/.umaskrc ]; then
+            umask $(/usr/bin/awk 'BEGIN {pwd=ENVIRON["PWD"]; a=length(pwd); cmax=0} {if($1==pwd) {MASK=$2;exit}; c=length($1); if(c>a) {next}; if(substr(pwd,0,c)==$1 && c > cmax) {cmax=c; MASK=$2}} END {print MASK}' ~/.umaskrc) >/dev/null
+        else
+            return 0
+        fi
 }
 
 ### Attention à ce que vous éditez dans cette section ###
@@ -99,6 +111,38 @@ function cd {
 # | Génération du prompt |
 # +----------------------+
 
+cyan='\[\e[1;36m\]'
+violet='\[\e[1;35m\]'
+violet_thin='\[\e[0;35m\]'
+jaune='\[\e[1;33m\]'
+rouge='\[\e[1;31m\]'
+vert='\[\e[1;32m\]'
+vert_thin='\[\e[0;32m\]'
+bleu='\[\e[1;34m\]'
+nocolor='\[\e[0m\]'
+
+if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
+    # support de la couleur
+    color_prompt=yes
+    # Couleurs dans "user@host $"
+    username_color=$rouge
+    host_color=$bleu
+    symbols_color=$vert
+    # Couleur de la ligne séparatrice de prompt
+    line_color=$cyan
+    # Couleur du path actuel
+    pwd_color=$jaune
+    # Couleur de la date
+    date_color=$violet
+    # Couleur d'affichage de vcs_info
+    vcs_symbols_color=$violet_thin
+    vcs_type_color=
+    vcs_branch_color=$vert_thin
+else
+    # pas de support de la couleur
+    color_prompt=no
+fi
+
 
 # Génération de la ligne de "-"
 function gen_minus_line
@@ -118,19 +162,11 @@ function prompt_command
 {
     # Attention aux hacks pour que la couleur (et sa taille)
     #  soient évaluées au moment de l'affichage du prompt
-    local pwd cyan violet jaune rouge vert bleu ERR DATE PROMPT DIR POST_DIR
+    local pwd ERR DATE PROMPT DIR POST_DIR
     (( SAVE_COLUMNS == COLUMNS )) || gen_minus_line
 
-#~#     #dépend de la section VCS
-#~#     get_vcs_info
-    
-    cyan='\[\e[1;36m\]'
-    violet='\[\e[1;35m\]'
-    jaune='\[\e[1;33m\]'
-    rouge='\[\e[1;31m\]'
-    vert='\[\e[1;32m\]'
-    bleu='\[\e[1;34m\]'
-    nocolor='\[\e[0m\]'
+    #~# #dépend de la section VCS
+    #~# get_vcs_info
     
     pwd=${PWD/#$HOME/'~'}
     if (( ${#pwd} + ${VCS_size} + 27 > COLUMNS )); then
@@ -146,11 +182,14 @@ function prompt_command
         POST_DIR='${MINUS_LINE:'${#pwd}+${VCS_size}+1'+${#?}}'
     fi
     if [ "$color_prompt" = yes ]; then
-        DIR="< ${jaune}"$DIR"${cyan} >"
-        ERR='[ \[\e[1;$((31+($?==0)*6))m\]$?'${cyan}' ]'$MINUS_CHAR
-        DATE="( ${violet}\D{%H:%M:%S}${cyan} )"
-        PROMPT="${rouge}\u${vert}@${bleu}\h ${vert}\$ ${nocolor}"
-        PS1=$TITLE${cyan}$MINUS_CHAR$DATE$MINUS_CHAR$DIR$MINUS_CHAR$VCS_info${cyan}$POST_DIR$ERR'\n'$PROMPT
+        DIR="< ${pwd_color}"$DIR"${line_color} >"
+        # On affiche le code de retour en "no color" si c'est 0, en rouge sinon
+        # Ceci n'est pas customizable à coup de variable,
+        # il faut changer $((31+($?==0)*6)) si vous y tenez vraiment et que vous comprenez ce que vous faites
+        ERR='[ \[\e[1;$((31+($?==0)*6))m\]$?'${line_color}' ]'$MINUS_CHAR
+        DATE="( ${date_color}\D{%H:%M:%S}${line_color} )"
+        PROMPT="${username_color}\u${symbols_color}@${host_color}\h ${symbols_color}\$ ${nocolor}"
+        PS1=$TITLE${line_color}$MINUS_CHAR$DATE$MINUS_CHAR$DIR$MINUS_CHAR$VCS_info${line_color}$POST_DIR$ERR'\n'$PROMPT
     else
         DIR="< "$DIR" >"
         ERR='[ $? ]'$MINUS_CHAR
@@ -160,14 +199,6 @@ function prompt_command
     fi
 }
 
-if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
-    # support de la couleur
-    color_prompt=yes
-else
-    # pas de support de la couleur
-    color_prompt=no
-fi
-
 # On change le titre de la fenêtre dynamiquement si on est sous X
 if [[ $TERM = "xterm" ]]; then
     TITLE='\[\e];\u@\h:\w\a\]'