
                               Le ls en couleur

Thorbjoern Ravn Andersen (ravn@imada.ou.dk)
version franaise : Pierre Vassellerie (Pierre.Vassellerie@obspm.fr)

   v1.0f2, 14 Octobre 1995
     _________________________________________________________________

   _La commande ls livre dans la distribution Slackware de Linux permet
   un affichage en couleur (Slackware 2.0.2 et noyau 1.1.54 de Linux.
   Ceci marche aussi bien avec agetty, qu'avec mgetty_ps). Il se peut que
   les couleurs par dfaut ne vous plaisent pas et que vous prenne
   l'envie de les trifouiller. Ce document a pour unique but de vous
   expliquer le principe de fonctionnement et la configuration des
   couleurs utiliss par cette commande._
     _________________________________________________________________

1. Comment slectionner les couleurs ?

   Il existe deux mthodes :
    1. Premire mthode : utiliser le programme _setterm_ qui s'avre
       parfait pour une modification rapide et simple de la configuration
       par dfaut. Les manuels et aides de cette commande sont
       relativement nigmatiques et je ne tenterais en aucune manire de
       vous les rendre plus clairs ;-). Les slections sont ralises par
       :
        setterm -foreground black -background white -store
       o _-store_ signifie que cette configuration est  enregistrer
       comme configuration par dfaut pour la console courante. Il vous
       faudra recommencer cette opration pour chaque nouvelle console
       virtuelle, et il semble alors une excellente ide de placer cette
       ligne dans votre .login (en csh ou tcsh) ou votre .profile (en sh,
       ksh ou bash). Vous en connaissez dsormais autant que moi sur la
       commande _setterm_ :-).
    2. Deuxime mthode : Linux utilise les codes d'chappement ANSI du
       style
  ESC [ <parametres> m
       o ESC est le caractre ASCII 27 et _paramtres_ est aucun ou
       plusieurs nombres spars par des points-virgules. Par exemple :
  "\033[41;33;1m" qui donne un affichage jaune sur fond rouge
  "\033[30;47m"   qui donne un affichage blanc sur fond noir
  "\033[m"        qui retablit l'affichage par defaut

   Ces exemples ncessitent un shell reconnaissant les constructions du
   type \xxx. Si ce n'est pas le cas, insrez directement un caractre
   d'chappement directement dans la chane. Sous bash/vi tapez Ctrl-V
   ESC, et sous tcsh/emacs tapez Ctrl-Q ESC.

2. Quelles combinaisons de couleurs sont possibles ?

   Ceci est un script en C-shell faisant apparatre sur la console
   l'ensemble des combinaisons de couleurs :
     _________________________________________________________________

#!/bin/csh
#
# Affiche les couleurs ANSI
#
set esc="\033["
foreach fore (30 31 32 33 34 35 36 37)
  set line1="$fore  " line2="    "
  foreach back (40 41 42 43 44 45 46 47)
    set line1="${line1}${esc}${back};${fore}m Normal  ${esc}0m"
    set line2="${line2}${esc}${back};${fore};1m ${back} Bold ${esc}0m"
  end
  echo "$line1\n$line2"
end
     _________________________________________________________________

   Le numro de la couleur d'avant-plan est croissant vers la gauche, et
   le numro de la couleur d'arrire-plan est donn dans le pav. Si vous
   dsirez un affichage en gras, ajoutez un 01 comme premier paramtre.
   Mettez un point-virgule entre chaque paramtre, et mettez l'ensemble
   de la squence comme _paramtres_.

3. Affichage par type de fichiers

   La commande ls commence par regarder la dfinition des associations de
   couleurs dans le fichier ~/.dir_colors et s'il n'existe pas utilise le
   fichier /etc/DIR_COLORS. Ces fichiers contiennent des entres du style
   :
    LINK 36;1           # lien symbolique
    FIFO 40;33          # tube
    SOCK 41;01;35       # socket
    BLK 41;33;01        # gestionnaire en mode bloc
    CHR 41;33;01        # gestionnaire en mode caractere

    EXEC 32;1           # fichier avec droit d'execution

    .tar 01;31          # archives et fichiers compresss
    .tgz 01;31
    .zip 01;31
    .z   01;31
    .Z   01;31
    .gz  01;31

   les squences ANSI donnes en paramtres sont ici donnes exactement
   avec la mme syntaxe que pour la commande _setterm_. Modifiez ceci 
   votre guise, et voyez le rsultat d'un _ls_ sur /sbin, /etc et /dev.

   Afin que le fichier /etc/DIR_COLORS ou ~/.dir_colors soit pris en
   compte, il vous faut rajouter dans /etc/profile ou ~/.profile
   (sh/bash) ou /etc/csh.login ou ~/.login (csh/tcsh) la ligne :
 eval `/bin/dircolors`

   _ATTENTION_ : cette ligne doit tre place avant une quelconque
   dfinition d'alias pour ls. Cette commande lit le fichier
   /etc/DIR_COLORS ou ~/.dir_colors et fournit les variables
   d'environnement LS_COLORS et LS_OPTIONS ainsi que les alias ls, dir,
   vdir, d et v.

4. Comment donner une configuration par dfaut

   Ceci est ralis individuellement pour chaque console virtuelle 
   l'aide de la squence ANSI :

     Cette information a t trouve en parcourant le source du noyau.
     Je ne peux donc dire s'il s'agit d'un standard.

        ESC [ 8 ]

   qui spcifie les valeurs par dfaut des couleurs d'avant et
   arrire-plan. La squence ANSI de recomposition des attributs (ESC [
   m) permet alors de prendre en compte ces couleurs plutt que du blanc
   sur fond noir.

   La mthode dcrite ici est suppose tre pour des systmes "isols",
   dans le sens o les logins ne se font que sur la console. Ceci ne
   marche pas forcment pour des logins se faisant depuis des terminaux
   distants, des connexions par modem ou d'autres machines, qui dans ce
   cas ne comprendrait pas les squences. L'interprtation des codes ANSI
   est une proprit des consoles Linux et n'existe que dans peu d'autres
   programmes de terminal.

   Si vous tes sur un systme "isol", un bon moyen de faire prendre en
   compte les couleurs pour chaque console est de modifier le fichier
   /etc/issue, et d'en voir le rsultat en se dlogeant. Gnralement (et
   en particulier dans les distributions Slackware) ce fichier est lu et
   affich  chaque reboot. Ainsi si votre /etc/rc.d/rc.S contient (aux
   environs de la ligne 75) :
  # Initialise /etc/issue et /etc/motd pour qu'il donne la version du noyau uti
lise
  # ATTENTION : les fichiers /ETC/ISSUE AND /ETC/MOTD sont crees  chaque boot.
  # Mettez ceci en commentaire si vous desirez personnaliser une bonne fois pou
r
  # toute ces fichiers.
  echo ""> /etc/issue
  echo Bienvenue dans le monde merveilleux de Linux \
       `/bin/uname -a | /bin/cut -d\  -f3`. >> /etc/issue
  echo >> /etc/issue

   Mettez ces lignes en commentaire ou modifiez comme suit :
...
  # Mettez ceci en commentaire si vous desirez personnaliser une bonne fois pou
r
  # toute ces fichiers
  ESCAPE="<remplacez ici par un seul caractere d'echappement>"
  echo "${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J"> /etc/issue
...

   Mon shell de dmarrage ne comprend pas le \033, je dois alors
   spcifier le code ASCII 27 dans mon script comme indiqu dans le
   premier paragraphe. La ligne ressemble alors  ESCAPE="^[".

   Ce code a pour effet de ramener le curseur en dbut de fentre,
   changer les couleurs, sauver la slection et effacer l'cran. Cette
   modification n'aura un effet qu'au prochain reboot.

   Si votre "bote Linux" n'est pas "isole", il se peut que certains
   problmes apparaissent lors des connexions des utilisateurs distants.
   Ceci est d au fait que leur terminal ne comprend pas les squences
   d'chappement ANSI.

   Vous devez alors ajouter au niveau de l'utilisateur :
     _________________________________________________________________

.profile (sh/bash) :
  if [ "$TERM" = "console" ]; then
      echo "\033[37;44m\033[8]"
  fi

ou

.login (csh/tcsh) :
  if ( "$TERM" == "console" ) then
    echo "\033[37;44m\033[8]"
  endif
     _________________________________________________________________

   Si l'on dsire que la modification se fasse pour tous les utilisateurs
   du systme, il suffit alors que root modifie les fichiers /etc/profile
   ou /etc/csh.login. (Je rappelle une dernire fois que si le shell ne
   peut interprter les \0xx (en particulier l'chappement \033), il
   suffit de remplacer ce dernier par "ESC".

5. Commentaires et critiques

   L'auteur original de ce document nous dit :
  This is still a rough draft, and English isn't my primary language.
Please feel free to correct me on the above text in order to make it as
clear and correct as possible.  This goes, of course, for the information
provided as well.

Comments and criticism goes to
--
  Thorbjo/rn Ravn Andersen              "...and...Tubular Bells!"
  ravn@imada.ou.dk
  <http://www.imada.ou.dk/~ravn>

   et je suis bien d'accord avec lui. Pour la version franaise,
   n'hsitez pas une seconde  m'envoyer vos remarques, corrections,
   ajouts, bouteilles de vin, etc...

6. Copyright

   Cette version est plac sous copyright (c)1995 de Pierre Vassellerie.

   Comme tous les documents HOWTO, ce document peut tre reproduit et
   distribu dans son intgralit ou partiellement, par quelque moyen
   physique que ce soit. Il reste malgr tout sujet aux conditions
   suivantes :

     * La mention des copyrights doit tre conserve, et la prsente
       section prserve dans son intgralit sur toute copie intgrale
       ou partielle.
     * Les traductions et travaux drivs doivent tre approuvs par les
       auteurs avant distribution.
     * Si vous distribuez ce _travail_ en partie, vous devez mentionnez
       comment obtenir une version intgrale de ce document et tre en
       mesure de la fournir.
     * De petites portions de ce document peuvent tre utilises comme
       illustrations d'une prsentation ou comme remarques sans
       autorisation pralable si les citations d'usage sont ralises.

   Des exceptions  ces rgles peuvent tre accordes dans des buts
   ducatifs, crivez  l'auteur et demandez. Ces restrictions ont pour
   but unique de protger les auteurs et leur travail. Toute aide
   ducative de ce document sera grandement apprcie.
