  Le ls en couleur
  Thorbjoern Ravn Andersen (ravn@imada.ou.dk)
  version   francaise  :  Pierre  Vassellerie  (Pierre.Vassel-
  lerie@obspm.fr)
  v1.0f2, 14 Octobre 1995

  La commande ls livree 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 defaut 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 utilises par cette commande.

  11..  CCoommmmeenntt sseelleeccttiioonnnneerr lleess ccoouulleeuurrss ??

  Il existe deux methodes :

  1. Premiere methode  :  utiliser  le  programme  _s_e_t_t_e_r_m  qui  s'avere
     parfait  pour une modification rapide et simple de la configuration
     par  defaut.  Les  manuels  et  aides  de   cette   commande   sont
     relativement  enigmatiques  et je ne tenterais en aucune maniere de
     vous les rendre plus clairs ;-).

     Les selections sont realisees par :

             setterm -foreground black -background white -store

  ou _-_s_t_o_r_e signifie que cette configuration  est  a  enregistrer  comme
  configuration  par  defaut  pour  la  console courante. Il vous faudra
  recommencer cette operation pour chaque nouvelle console virtuelle, et
  il  semble  alors une excellente idee de placer cette ligne dans votre
  .login (en csh ou tcsh) ou votre .profile (en sh, ksh ou bash).   Vous
  en connaissez desormais autant que moi sur la commande _s_e_t_t_e_r_m :-).

  2. Deuxieme  methode  :  Linux utilise les codes d'echappement ANSI du
     style

       ESC [ <parametres> m

  ou ESC est le caractere ASCII 27 et _p_a_r_a_m_e_t_r_e_s est aucun ou  plusieurs
  nombres separes 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  necessitent un shell reconnaissant les constructions du
  type \xxx. Si ce n'est pas le cas, inserez  directement  un  caractere
  d'echappement  directement  dans  la chaine. Sous bash/vi tapez Ctrl-V
  ESC, et sous tcsh/emacs tapez Ctrl-Q ESC.

  22..  QQuueelllleess ccoommbbiinnaaiissoonnss ddee ccoouulleeuurrss ssoonntt ppoossssiibblleess ??

  Ceci est un script  en  C-shell  faisant  apparaitre  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="\*(dRfore  " line2="    "
    foreach back (40 41 42 43 44 45 46 47)
      set line1="\*(dR{line1}\*(dR{esc}\*(dR{back};\*(dR{fore}m Normal  \*(dR{esc}0m"
      set line2="\*(dR{line2}\*(dR{esc}\*(dR{back};\*(dR{fore};1m \*(dR{back} Bold \*(dR{esc}0m"
    end
    echo "\*(dRline1\n\*(dRline2"
  end
  ______________________________________________________________________

  Le  numero de la couleur d'avant-plan est croissant vers la gauche, et
  le numero de la couleur d'arriere-plan est donne  dans  le  pave.   Si
  vous  desirez  un  affichage  en  gras,  ajoutez  un  01 comme premier
  parametre.  Mettez un point-virgule entre chaque parametre, et  mettez
  l'ensemble de la sequence comme _p_a_r_a_m_e_t_r_e_s.

  33..  AAffffiicchhaaggee ppaarr ttyyppee ddee ffiicchhiieerrss

  La commande ls commence par regarder la definition 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 entrees 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 compresses
      .tgz 01;31
      .zip 01;31
      .z   01;31
      .Z   01;31
      .gz  01;31

  les sequences ANSI donnees en parametres sont ici  donnees  exactement
  avec  la  meme  syntaxe que pour la commande _s_e_t_t_e_r_m.  Modifiez ceci a
  votre guise, et voyez le resultat d'un _l_s 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`

  AATTTTEENNTTIIOONN : cette ligne doit etre placee avant une quelconque  defini-
  tion  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4..  CCoommmmeenntt ddoonnnneerr uunnee ccoonnffiigguurraattiioonn ppaarr ddeeffaauutt

  Ceci  est  realise  individuellement  pour  chaque console virtuelle a
  l'aide de la sequence ANSI : (-- Cette information a  ete  trouvee  en
  parcourant  le  source du noyau. Je ne peux donc dire s'il s'agit d'un
  standard.--)

          ESC [ 8 ]

  qui specifie les valeurs par defaut des couleurs d'avant  et  arriere-
  plan.   La sequence ANSI de recomposition des attributs (ESC [ m) per-
  met alors de prendre en compte ces couleurs plutot que  du  blanc  sur
  fond noir.

  La  methode  decrite ici est supposee etre pour des systemes "isoles",
  dans le sens ou les logins ne se font que  sur  la  console.  Ceci  ne
  marche  pas  forcement 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 sequences.  L'interpretation des codes
  ANSI est une propriete des consoles Linux et  n'existe  que  dans  peu
  d'autres programmes de terminal.

  Si  vous etes sur un systeme "isole", 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 resultat en se delogeant. Generalement (et
  en particulier dans les distributions Slackware) ce fichier est lu  et
  affiche  a 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 utilise
    # ATTENTION : les fichiers /ETC/ISSUE AND /ETC/MOTD sont crees a chaque boot.
    # Mettez ceci en commentaire si vous desirez personnaliser une bonne fois pour
    # 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 pour
    # 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  demarrage  ne  comprend  pas  le  \033,  je  dois  alors
  specifier  le  code  ASCII  27  dans  mon script comme indique dans le
  premier paragraphe.  La ligne ressemble alors a ESCAPE="^[".

  Ce code a pour effet de  ramener  le  curseur  en  debut  de  fenetre,
  changer  les  couleurs,  sauver la selection et effacer l'ecran. Cette
  modification n'aura un effet qu'au prochain reboot.

  Si votre "boite  Linux" n'est pas "isolee", il se  peut  que  certains
  problemes  apparaissent lors des connexions des utilisateurs distants.
  Ceci est du au fait que leur terminal ne comprend  pas  les  sequences
  d'echappement ANSI.

  Vous devez alors ajouter au niveau de l'utilisateur :

  ______________________________________________________________________
    if [ "\*(dRTERM" = "console" ]; then
        echo "\033[37;44m\033[8]"
    fi

  ou

    if ( "\*(dRTERM" == "console" ) then
      echo "\033[37;44m\033[8]"
    endif
  ______________________________________________________________________

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

  55..  CCoommmmeennttaaiirreess eett ccrriittiiqquueess

  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 francaise,
  n'hesitez pas une seconde  a  m'envoyer  vos  remarques,  corrections,
  ajouts, bouteilles de vin, etc...

  66..  CCooppyyrriigghhtt

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

  Comme tous les documents HOWTO, ce document  peut  etre  reproduit  et
  distribue  dans  son  integralite  ou partiellement, par quelque moyen
  physique que ce soit.  Il  reste  malgre  tout  sujet  aux  conditions
  suivantes :

  +o  La  mention  des  copyrights  doit  etre  conservee, et la presente
     section preservee dans son integralite sur toute copie integrale ou
     partielle.

  +o  Les  traductions  et travaux derives doivent etre approuves par les
     auteurs avant distribution.

  +o  Si vous distribuez ce ttrraavvaaiill  en  partie,  vous  devez  mentionnez
     comment  obtenir  une  version  integrale de ce document et etre en
     mesure de la fournir.
  +o  De petites portions de ce document  peuvent  etre  utilisees  comme
     illustrations   d'une   presentation   ou   comme   remarques  sans
     autorisation prealable si les citations d'usage sont realisees.

  Des exceptions a ces regles  peuvent  etre  accordees  dans  des  buts
  educatifs,  ecrivez  a l'auteur et demandez. Ces restrictions ont pour
  but unique de proteger  les  auteurs  et  leur  travail.   Toute  aide
  educative de ce document sera grandement appreciee.

