[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]

Re: Comment colorer mon shell que je trouve un peu... hum.. "plate"



[email protected] (Mathieu) écrit:

> Comment faire le hightlite sur les différents types de fichier dans
> mon shell (qui est bash en passant)

D'autres ont déjà répondu à cette question précise.  Toutefois, puisque
l'idée semble être d'ajouter un peu de couleur dans l'interaction du shell,
le script suivant pourrait peut-être t'amuser.  Je m'arrange pour exécuter:

   eval `set-prompt`

lors du démarrage d'un shell.  On peut aussi faire:

   eval `set-prompt N`

avec N étant un nombre entre 0 et 9, pour forcer un style de coloration
particulier.  J'utilise des couleurs agressives (jaune et rouge) comme
super-usager, et des couleurs plus douces (vert et bleu) comme usager
ordinaire.  Je n'examine pas le script outre-mesure pour voir s'il s'exécute
facilement hors de mon environnement, vous me direz ce qu'il en est! :-)

J'espère aussi que l'usage d'une pièce-jointe MIME ne vous créera pas
de problème particulier -- il est bon d'utiliser un lecteur de messagerie
qui se débrouille bien avec MIME, de toute façon!

#!/bin/bash
# Fournir sur stdout les commandes pour changer l'invite.
# Copyright © 1998, 2000 Progiciels Bourbeau-Pinard inc.
# François Pinard <[email protected]>, 1998.

# Si aucun paramètre n'est donné, le style est déterminé automatiquement.
# Sinon, c'est un nombre entre 0 et 9.  Voir le dernier `case' plus bas.

if [ $# = 0 ]; then

  if [ "$RANDOM" = "$RANDOM" ]; then
    style=0
  else
    case $TERM in
      dumb)
        if [ -n "$EMACS" -a -n "$DISPLAY" ]; then
          style=6
        else
          style=2
        fi
        ;;
      emacs|linux|screen)
        # Auparavant, style=4 pour `/dev/ttyN'.
        style=6
        ;;
      vt100*)
        echo 1>&2 -n "Est-ce que le fond est blanc (y/n)? [y] "
        read answer
        [ -z "$answer" ] && answer=y
        case "$answer" in
          y) style=6 ;;
          *) style=4 ;;
        esac
        ;;
      xterm)
        style=6
        ;;
      *)
        style=2
        ;;
    esac
  fi

  [ $LOGNAME = root ] && style=`expr $style + 1`

else

  style=$1

fi

if [ -n "$DOSWIN" ]; then
  # Le bash de DJGPP ajoute plusieurs blancs suffixes à \h.
  uh='$LOGNAME@$HOST:\w'
else
  uh='\u@\h:\w'
fi

case $style in
  0)                            # Prompts under sh for user
     echo 'PS1='\''$ '\'
     echo 'PS2='\''  '\'
     ;;
  1)                            # Prompts under sh for super-user
     echo 'PS1='\''# '\'
     echo 'PS2='\''  '\'
     ;;
  2)                            # Prompts under bash/ksh
     echo 'PS1='\''$? '$uh' $ '\'
     echo 'PS2='\''  '$uh'   '\'
     ;;
  3)                            # Prompts under bash/ksh for super-user
     echo 'PS1='\''$? '$uh' # '\'
     echo 'PS2='\''  '$uh'   '\'
     ;;
  4)                            # Color prompts for user, over black
     echo 'PS1='\''\[\]$?\[\] '$uh'\[\] $\[\] '\'
     echo 'PS2='\'' \[\] '$uh'\[\]   '\'
     ;;
  5)                            # Color prompts for super-user, over black
     echo 'PS1='\''\[\]$?\[\] '$uh'\[\] #\[\] '\'
     echo 'PS2='\'' \[\] '$uh'\[\]   '\'
     ;;
  6)                            # Color prompts for user, over white
     echo 'PS1='\''\[\]$?\[\] '$uh'\[\] $\[\] '\'
     echo 'PS2='\'' \[\] '$uh'\[\]   '\'
     ;;
  7)                            # Color prompts for super-user, over white
     echo 'PS1='\''\[\]$?\[\] '$uh'\[\] #\[\] '\'
     echo 'PS2='\'' \[\] '$uh'\[\]   '\'
     ;;
  8)                            # Color prompts for user, xterm over white
     echo 'PS1='\''\[\]$?\[]0;'$uh'\a\] $\[\] '\'
     echo 'PS2='\'' \[\] '$uh'\[\]   '\'
     ;;
  9)                            # Color prompts for super-user, xterm over white
     echo 'PS1='\''\[\]$?\[]0;'$uh'\a\] #\[\] '\'
     echo 'PS2='\'' \[\] '$uh'\[\]   '\'
     ;;
esac

-- 
François Pinard   http://www.iro.umontreal.ca/~pinard