LinuxDoc+Emacs+Ispell-HOWTO
 Auteur : Philippe MARTIN ([email protected])

 v0.5, 28 Avril 1998

 Ce  document s'adresse aux traducteurs et redacteurs de HOWTO Linux ou
 de toute autre documentation du  Projet  de  Documentation  Linux.  Il
 donne  a  ces  derniers  des trucs et astuces pour l'utilisation entre
 autre d'Emacs et d'Ispell.

 11..

 PPrreeaammbbuullee

 11..11..

 CCooppyyrriigghhtt

 Copyright Philippe Martin 1998
 Vous  pouvez  redistribuer  et/ou  modifier  ce  document  selon   les
 conditions  de la GNU General Public Licence, version 2 ou ulterieure.

 11..22..

 RReemmeerrcciieemmeennttss

 Je remercie tout particulierement Sebastien Blondeel pour m'avoir pose
 tant  de  questions  si  pertinentes  sur  la  configuration  d'Emacs,
 questions qui m'ont permises de concretiser mes connaissances  sur  le
 sujet et de vous en faire part.

 11..33..

 RReemmaarrqquueess

 N'hesitez pas a me faire parvenir toute remarque et/ou critique sur ce
 document, je  les  examinerai  afin  de  faire  evoluer  au  mieux  ce
 document.
 N'hesitez  pas  non  plus  a me poser des questions relatives au sujet
 traite dans cet HOWTO, j'y repondrai avec un interet tout particulier.

 11..44..

 VVeerrssiioonnss

 Ce document traite des versions suivantes :

 +o  Sgml-tools version 0.99,

 +o  Emacs version 19.34,

 +o  Ispell version 3.1,

 +o  Toutes  les  bibliotheques  Emacs auxquelles je fais reference sont
    celles distribuees avec la version d'Emacs precitee, sauf  iso-sgml
    distribuee avec XEmacs et psgml distribuee seule.

 22..

 IInnttrroodduuccttiioonn

 22..11..

 LLee llaannggaaggee SSGGMMLL

 Le  langage SSGGMMLL (_S_t_a_n_d_a_r_d _G_e_n_e_r_a_l_i_z_e_d _M_a_r_k_u_p _L_a_n_g_u_a_g_e) est un langage
 qui permet de definir des types de documents.

 On peut par exemple definir grace a lui un type de document _r_e_c_e_t_t_e _d_e
 _c_u_i_s_i_n_e, qui precisera qu'il faudra y inclure une premiere partie avec
 les differents ingredients, puis une deuxieme  avec  les  accessoires,
 une  troisieme  donnant  la  facon de faire votre gateau pas a pas, et
 enfin une belle photo qui montre le resultat final.

 Cette definition d'un type de document est appele DDTTDD  (_D_o_c_u_m_e_n_t  _T_y_p_e
 _D_e_f_i_n_i_t_i_o_n).  Elle  ne  permet  pas de definir quelle sera l'allure du
 document final, mais seulement ce qu'il contiendra ou pourra contenir.

 Pour  reprendre  l'exemple  precedent, je suis sur qu'en lisant l'idee
 que je me fais d'une recette de cuisine, vous avez reconnu celles  que
 vous  ou  votre  cuistot  attitre utilisez. Et pourtant, elles ont une
 allure completement differente : les miennes  ont  une  photo  qui  se
 trouve  en  haut  a gauche du placard de la salle de bain, et la liste
 des ingredients se trouve entre les bouteilles de lait et  de  gaz  au
 fond du jardin. Et les votres ?

 Grace  a  cette  definition  type, quelqu'un peut ecrire son document,
 sans tenir compte de la forme qu'il aura quand il arrivera devant  les
 yeux du lecteur.

 22..22..

 LLaa ddeeffiinniittiioonn dduu ttyyppee LLiinnuuxxDDoocc

 Ce  type  permet  d'ecrire,  vous  l'aviez  devine,  des  documents se
 reportant a Linux.

 Ces documents sont en general construits ainsi : ils commencent par un
 titre  suivi  de l'auteur, de la date de diffusion et de la version de
 ce document.  Suit  juste  apres  un  court  paragraphe  qui  explique
 brievement  ce  que  contient  ce document (ce qui evite d'attendre de
 l'avoir fini pour se rendre compte que ce n'est pas  du  tout  ce  que
 l'on  recherchait)  puis  une  table  des  matieres qui montre plus en
 detail son contenu et permet aux plus presses d'aller voir directement
 ce qu'ils cherchent.

 Et  vient  ensuite  une  suite de chapitres, sections, paragraphes. Au
 milieu de ces paragraphes, on peut inserer des morceaux de  programme,
 ou  changer  de police de caracteres pour faire ressortir un mot ou un
 passage, ou encore y inserer des listes, faire reference a  une  autre
 partie du document, et d'autres choses encore.

 Pour ecrire un tel document, il suffit alors de preciser au bon moment
 le titre, l'auteur, la date  et  la  version  du  document,  puis  les
 chapitres  et  sections, dire quand il faut inserer une liste et quels
 en sont les elements, et ainsi de suite.

 22..33..

 LLeess SSGGMMLL--TToooollss

 Les  SSGGMMLL--TToooollss  permettent,  a  partir  de  cette  specification   du
 document,  d'obtenir  le  document  final  dans  le  format  que  vous
 preferez. Si vous voulez l'ajouter a votre  bibliotheque  personnelle,
 ce  sera  surement  du _P_o_s_t_S_c_r_i_p_t, si vous voulez le faire partager au
 reste de la planete a travers le Web,  pourquoi pas  du  _H_T_M_L,  ou  si
 vous  craquez  et  voulez  le  lire sous Windows, vous pouvez toujours
 l'avoir en _R_T_F pour pouvoir le lire sous  n'importe  quel  editeur  de
 texte.  Ou  peut-etre  sous  chacun  de  ces formats, si vous avez des
 humeurs changeantes.

 La distribution SGML-Tools peut etre recuperee via FTP anonyme dans le
 repertoire ftp://ftp.lip6.fr/pub/sgml-tools/

 33..

 VVoottrree pprreemmiieerr ddooccuummeenntt

 33..11..

 DDeeppuuiiss uunn ddooccuummeenntt aauu ffoorrmmaatt tteexxttee

 Si vous possedez un document au format texte que vous desirez formater
 en SGML pour ensuite le transformer en divers formats, voici la marche
 a suivre :

 1. Ajoutez au tout debut du fichier les lignes suivantes :

            <!doctype linuxdoc system>
            <article>
            <title>le titre ici</title>
            <author>
            le nom de l'auteur, son email
            </author>
            <date>
            la version et la date du document
            </date>

 2. S'il  y  a au tout debut du document un court paragraphe qui decrit
    brievement le contenu de ce document, encadrez ce  paragraphe  avec
    les balises <abstract> et </abstract>.

 3. Ajoutez   juste   a   la   suite   la   balise  <toc>,  qui  insere
    automatiquement la table des matieres.

 4. Au debut de chaque nouveau chapitre, remplacez la  ligne  contenant
    le numero et le titre du chapitre par :

           <sect>le titre du chapitre

 et rajoutez la balise </sect> a la fin du chapitre.

 NNoottee  ::  Il n'est pas necessaire d'indiquer le numero du chapitre, car
 ils sont numerotes automatiquement.

 5. Faites la meme chose pour les sections, en remplacant le numero  et
    le  titre  par  <sect1>  et  en  rajoutant  </sect1> a la fin de la
    section.

 6. Il est possible de creer des sous-sections jusqu'au niveau 4  (avec
    <sect4> et </sect4>) en operant de la meme maniere.

 7. A chaque debut de paragraphe, ajoutez la balise <p>.

 8. Si  vous  desirez  mettre  en  valeur  certains  mots  ou certaines
    phrases, entourez-les des balises <it> et </it> (_i_t_a_l_i_q_u_e), ou <bf>
    et  </bf>  (ggrraass), ou encore <tt> et </tt> (caracteres de machine a
    ecrire d'antan).

 9. Lorsqu'une  liste  apparait  dans  le  texte,  comme  celle-ci  par
    exemple :

            Voici une liste :

            - d'une ligne,
            - ah non, deux,
            - tiens, trois,
            - c'est tout.

            de quatre lignes !

 il faut la remplacer par :

         Voici une liste :
        <itemize>
        <item>d'une ligne,
        <item>ah non, deux,
        <item>tiens, trois,
        <item>c'est tout.
         </itemize>
         de quatre lignes !

 10.
    Lorsqu'un  bloc  represente une partie de programme, ou autre chose
    que l'on veut faire ressortir :

           <verb>
            10 REM Tiens qu'est-ce que c'est ?
            20 REM Je croyais que ca n'existait plus !
            30 PRINT "Je suis de retour ";
            40 PRINT "pour sauver le monde."
            50 INPUT "Des mains de qui d'apres toi ?",M$
            60 IF M$="Bill" THEN PRINT "Tu es un sage":GOTO AUPARADIS
            70 ELSE PRINT "Tu n'as rien compris...":GOTO AUPAYSDUDOLLAR
            </verb>

 11.
    Arrive a ce point, vous avez deja bien avance  votre  formatage  en
    SGML. Vous pourrez, si vous voulez affiner votre document, jeter un
    oeil sur le guide d'utilisation des SSGGMMLL--TToooollss, qui decrit plus  en
    detail le type de document LLiinnuuxxDDoocc.

 44..

 CCoonnffiigguurreerr EEmmaaccss

 44..11..

 LLeess ccaarraacctteerreess aacccceennttuueess

 Si  vous  desirez  ecrire  des documents en francais ou dans une autre
 langue europeenne, vous aurez besoin de  caracteres  accentues.  Voici
 comment configurer Emacs pour qu'il accepte ces caracteres.

 44..11..11..

 LL''aaffffiicchhaaggee ddeess ccaarraacctteerreess 88 bbiittss

 Pour  qu'Emacs  soit capable d'afficher des caracteres 8 bits, ajoutez
 les lignes suivantes a votre .emacs :

        (standard-display-european 1)
        (load-library "iso-syntax")

 Si vous utilisez Emacs sur un terminal qui ne supporte pas l'affichage
 des  caracteres 8 bits, vous pouvez utiliser la bibliotheque iso-ascii
 ((load-library  "iso-ascii")),  qui  permet  a  Emacs  d'afficher  les
 caracteres 8 bits d'une facon approchee.

 44..11..22..

 LLaa ssaaiissiiee ddeess ccaarraacctteerreess aacccceennttuueess

 Si  votre  clavier  permet  de  taper  les caracteres accentues, aucun
 probleme ne devrait se poser. En revanche,  s'il  ne  le  permet  pas,
 voici quelques moyens d'y remedier :

 44..11..22..11..

 LLaa bbiibblliiootthheeqquuee iissoo--aacccc

 La   bibliotheque  iso-acc  d'Emacs  permet  d'entrer  des  caracteres
 accentues malgre que l'on ait un clavier qui ne le permette  a  priori
 pas.

 Pour utiliser cette bibliotheque, ajoutez la ligne suivante a votre

         (load-library "iso-acc")

 Puis,  une  fois  avoir  relance  Emacs  et ouvert le fichier que vous
 voulez editer, tapez Meta-x iso-accents-mode.

 Vous pouvez alors entrer un caractere ee en tapant '' puis e. De maniere
 generale,  on  peut  entrer  un  caractere  accentue en tapant d'abord
 l'accent, puis  la  lettre  a  accentuer  (aussi  bien  minuscule  que
 majuscule). Voici les differents accents utilisables :

 ` : Un accent grave

 ^ : Un accent circonflexe

 " : Un trema

 ~  : Un tilde au dessus de la lettre, une cedille lorsqu'il precede un
 c, et d'autres encore (voir fichier iso-acc.el),

 / : Pour barrer une lettre, ...

 Si vous avez besoin d'entrer un de  ces  caracteres  et  non  pas  une
 lettre accentuee, tapez un espace a la suite de l'accent. Par exemple,
 pour taper _l_'_e_l_e_p_h_a_n_t, tapez l ' _<_s_p_c_> ' e l ' e ...

 Vous pouvez trouver l'ensemble des combinaisons dans le  fichier  iso-
 acc.el.

 44..11..22..22..

 LLaa ttoouucchhee _<_M_e_t_a_>

 Il  est  possible  avec  certains  terminaux  de saisir des caracteres
 accentues grace a la touche _<_M_e_t_a_> (ou _<_A_l_t_>). Par exemple, la  frappe
 de _<_M_e_t_a_>-i permet d'entrer le caractere ee.

 Mais  Emacs  prevoit  la touche _<_M_e_t_a_> pour d'autres utilisations.  Il
 faut donc taper la sequence CCttrrll--qq (commande quoted-insert)  avant  de
 taper _<_M_e_t_a_>-i.

 Cette  commande  permet  aussi d'entrer un caractere selon son code en
 octal. Tapez CCttrrll--qq suivi du code  en  octal  du  caractere  que  vous
 desirez entrer.

 44..11..33..

 AAffffiicchheerr lleess ccaarraacctteerreess SSGGMMLL eenn 88 bbiittss

 En  SGML,  les  caracteres  accentues  peuvent  etre tapes grace a des
 macros. Par exemple, le caractere ee s'ecrit &&eeaaccuuttee;;. En general,  les
 applications  qui lisent du SGML arrivent a lire les caracteres 8 bits
 et il n'est donc pas necessaire d'utiliser ces  macros.  Mais  il  est
 possible  que certaines ne le puissent pas. En sachant qu'il existe un
 moyen facile de remedier a ca, ce serait dommage  de  faire  "planter"
 ces dernieres applications.

 En effet, la bibliotheque iso-sgml vous permet d'entrer sous Emacs des
 caracteres accentues,  comme  d'habitude,  mais  lorsqu'il  enregistre
 votre  fichier,  il  transforme  tous  ces  caracteres 8 bits par leur
 equivalent SGML.

 Il est donc tres facile, grace a  cette  bibliotheque,  de  saisir  et
 relire  votre document sous Emacs, et vous etes sur que votre document
 ne sera pas rejete  par  une  application  qui  ne  comprend  pas  les
 caracteres 8 bits.

 Pour  utiliser  cette bibliotheque, il suffit de rajouter ces lignes a
 votre

        (setq sgml-mode-hook
        '(lambda () "Defauts pour le mode SGML."
        (load-library "iso-sgml")))

 44..22..

 LLee mmooddee SSGGMMLL

 Lorsque vous ouvrez un fichier avec une extension ..ssggmmll,  Emacs  lance
 normalement  le  mmooddee  ssggmmll.  S'il ne le fait pas, vous pouvez soit le
 faire   manuellement   avec   Meta-x   sgml-mode,   soit   le   lancer
 automatiquement en rajoutant ces lignes a votre .emacs :

       (setq auto-mode-alist
       (append '(("\.sgml$"  . sgml-mode))
                 auto-mode-alist))

 Ce mode permet par exemple de choisir comment inserer les caracteres 8
 bits.  En  utilisant  Meta-x  sgml-name-8bit-mode  (ou  dans  le  menu
 _S_G_M_L_/_T_o_g_g_l_e  _8  _b_i_t  _i_n_s_e_r_t_i_o_n),  vous  pouvez  choisir  d'inserer les
 caracteres 8 bits soit tels quels, soit sous leur forme SGML, c'est-a-
 dire sous la forme &&......;;.

 Il  permet  aussi de cacher ou non les balises SGML, avec Meta-x sgml-
 tags-invisible ou le menu _S_G_M_L_/_T_o_g_g_l_e _T_a_g _V_i_s_i_b_i_l_i_t_y.

 44..33..

 LLee mmooddee PPSSGGMMLL

 Le mode PSGML donne de grandes facilites  pour  editer  des  documents
 SGML sous Emacs.

 La documentation psgml-linuxdoc explique comment installer et utiliser
 ce mode conjointement avec _L_i_n_u_x_D_o_c.

 44..44..

 DDiivveerrss

 44..44..11..

 LLee mmooddee aauuttoo--ffiillll

 En mode normal, lorsque vous tapez un paragraphe et que  vous  arrivez
 en  bout  de  ligne,  vous devez vous-meme utiliser la touche _<_E_n_t_r_e_e_>
 pour revenir a la ligne, ou bien  votre  ligne  continue  indefiniment
 tout  le  long du paragraphe. Il en resulte, si vous utilisez _<_E_n_t_r_e_e_>
 pour revenir a la ligne, un paragraphe dont les fins de lignes ne sont
 pas alignees, et en general ces lignes rallongent ou raccourcissent au
 fur et a mesure. De meme si  vous  laissez  des  lignes  depasser  une
 longueur  raisonnable,  vous  ne  pourrez  pas  les voir sous certains
 editeurs.

 Le mode aauuttoo--ffiillll permet d'automatiser cette tache ingrate  :  lorsque
 vous  depassez une certaine colonne (la 70e par defaut), il vous place
 automatiquement a la ligne suivante.

 Voici comment utiliser ce mode, et fixer la largeur de  vos  lignes  a
 80 :

        (setq sgml-mode-hook
        '(lambda () "Defauts pour le mode SGML."
        (auto-fill-mode)
        (setq fill-column 80)))

 55..

 IIssppeellll

 Si  vous  desirez verifier l'orthographe de votre document directement
 depuis Emacs, vous pouvez utiliser la distribution IIssppeellll et son  mode
 associe sous Emacs.

 55..11..

 CCoonnffiigguurraattiioonn iinniittiiaallee

 Tout  d'abord,  ajoutez  ces  lignes  a  votre  .emacs pour configurer
 Emacs :

       (autoload 'ispell-word "ispell"
          "Check the spelling of word in buffer." t)
       (global-set-key "\e$" 'ispell-word)
       (autoload 'ispell-region "ispell"
          "Check the spelling of region." t)
       (autoload 'ispell-buffer "ispell"
          "Check the spelling of buffer." t)
       (autoload 'ispell-complete-word "ispell"
          "Look up current word in dictionary and try to complete it." t)
       (autoload 'ispell-change-dictionary "ispell"
          "Change ispell dictionary." t)
       (autoload 'ispell-message "ispell"
          "Check spelling of mail message or news post.")
       (autoload 'ispell-minor-mode "ispell"
          "Toggle mode to automatically spell check words as they are typed in.")

 55..22..

 LLee cchhooiixx ddee vvooss ddiiccttiioonnnnaaiirreess ppaarr ddeeffaauutt

 Vous pouvez configurer  Emacs  pour  qu'a  l'ouverture  d'un  fichier,
 celui-ci  choisisse automatiquement quels dictionnaires utiliser. Vous
 pouvez en  effet  utiliser  plusieurs  dictionnaires.  Le  premier  et
 surement  le  plus  important est le dictionnaire principal, distribue
 avec Ispell. Vous avez le choix entre plusieurs langues.  Le  deuxieme
 est  votre  dictionnaire  personnel, celui ou Ispell ajoutera les mots
 qu'il n'aura pas trouve dans le premier dictionnaire mais que vous lui
 aurez indique de garder.

 Voici les lignes a inserer a votre .emacs si vous desirez utiliser par
 defaut le dictionnaire francais distribue avec Ispell, et placer votre
 dictionnaire  personnel  dans un fichier .ispell-dico-perso dans votre
 repertoire racine.

        (setq sgml-mode-hook
       '(lambda () "Defauts pour le mode SGML."
       (setq ispell-personal-dictionary "~/.ispell-dico-perso")
       (ispell-change-dictionary "francais")
        ))

 55..33..

 CChhooiixx ddeess ddiiccttiioonnnnaaiirreess ppoouurr uunn cceerrttaaiinn ffiicchhiieerr

 Un petit probleme se pose si vous ne verifiez pas toujours des  textes
 dans  la  meme  langue.  Et  si  vous  traduisez des documents, il est
 probable que vous passiez d'une langue a l'autre assez souvent.

 Je ne connais pas de moyen en Lisp de choisir,  soit  automatiquement,
 soit en un _c_l_i_c_k de souris, les dictionnaires principaux et personnels
 associes a la langue utilisee dans le fichier en cours.  (Si  vous  en
 connaissez un, faites-moi signe !)

 Mais  il  est  possible  d'indiquer  quels  dictionnaires  vous voulez
 utiliser pour ce fichier (et seulement celui-la).  Il  suffit  de  les
 rajouter  en  commentaire,  a la fin du fichier, pour qu'Ispell puisse
 les lire en lancant une verification :

       <!-- Local IspellDict: english -->
       <!-- Local IspellPersDict: ~/emacs/.ispell-english -->

 Si vous avez defini dans votre .emacs que vos dictionnaires par defaut
 seront  francais, vous pouvez alors ajouter ces lignes a chaque fin de
 fichier dont le texte est en anglais.

 55..44..

 VVeerriiffiieerr vvoottrree ddooccuummeenntt

 Pour  lancer  la  verification  de  votre  document  en   integralite,
 utilisez,  depuis  n'importe  ou  dans  votre  document Meta-x ispell-
 buffer. Vous pouvez  aussi  lancer  la  verification  sur  une  region
 seulement du document :

 +o  Indiquez le debut de la region avec Ctrl-Spc (mark-set-command),

 +o  Placez-vous a la fin de la region a verifier,

 +o  tapez Meta-x ispell-region.

 Emacs lance alors Ispell. Si ce dernier trouve un mot qu'il ne connait
 pas, il vous indique ce mot  (normalement  en  surbrillance)  et  vous
 demande de presser une touche :

 +o  ssppcc accepte ce mot, uniquement pour cette fois,

 +o  ii accepte ce mot et l'insere dans votre dictionnaire personnel,

 +o  aa accepte ce mot pour cette session,

 +o  AA   accepte   ce  mot  pour  ce  fichier,  en  l'inserant  dans  le
    dictionnaire local au fichier,

 +o  rr permet de corriger le mot mal orthographie,

 +o  RR  permet  de  corriger  toutes  les   occurrences   du   mot   mal
    orthographie,

 +o  xx  arrete  la  verification,  et  replace  le curseur a sa position
    initiale,

 +o  XX arrete la verification en laissant le  curseur  sur  le  mot  mal
    orthographie,  vous  permettant  de  modifier  votre fichier ; vous
    pouvez continuer la verification en tapant Meta-x ispell-continue,

 +o  ?? affiche une aide en ligne.

 Si Ispell trouve un ou plusieurs mots ressemblant  a  celui  qu'il  ne
 connait  pas,  il  vous  les  indique  dans une petite fenetre, chacun
 precede d'un chiffre. Il suffit de presser un  de  ces  chiffres  pour
 corriger le mot mal orthographie par le mot correspondant.

 55..55..

 DDiiccttiioonnnnaaiirree ppeerrssoonnnneell ccoonnttrree ddiiccttiioonnnnaaiirree llooccaall aauu ffiicchhiieerr

 La touche ii permet d'inserer un mot dans  le  dictionnaire  personnel,
 alors  que  la  touche  AA permet d'inserer un mot dans le dictionnaire
 local au fichier.

 Le dictionnaire local au fichier est une suite de mots  inseres  a  la
 fin du fichier, sous forme de commentaires, et qui est relu par Ispell
 chaque fois que vous le lancez sur ce fichier. Cela permet  d'accepter
 certains  mots,  valables dans ce fichier, mais qui ne le seraient pas
 dans d'autres.

 A mon avis, il est  preferable  que  le  dictionnaire  personnel  soit
 reserve aux mots que le dictionnaire principal ne connait pas mais qui
 font vraiment partie de la langue  (comme  les  mots  composes),  plus
 certains  mots  n'appartenant  pas  a  la  langue  ou noms propres qui
 reviennent dans un grand  nombre  de  fichiers  (comme  _L_i_n_u_x)  et  ne
 ressemblant  pas trop a un mot du dictionnaire principal : l'ajout par
 exemple de certains noms et prenoms de personnes dans le  dictionnaire
 personnel peut etre dangereux, car ils ressemblent parfois a un mot de
 la langue (imaginez qu'il ne trouve pas de fautes  dans  la  phrase  :
 `_T_e_d _e_n _e_s_t _l_'_e_f_f_e_t _a_u _p_h_i_l _d_u _t_e_m_p_s_._' !).

 55..66..

 LLaa vveerriiffiiccaattiioonn ``aa llaa vvoolleeee''

 Ispell  peut  aussi verifier l'orthographe au fur et a mesure que vous
 tapez votre document. Il faut utiliser pour cela le mode iissppeellll--mmiinnoorr--
 mmooddee.  Lorsque vous desirez lancer ou arreter ce mode de verification,
 tapez Meta-x ispell-minor-mode. Ispell vous envoie alors un _b_i_p chaque
 fois que vous tapez un mot qu'il ne connait pas.

 Si  ces  _b_i_p  a repetition vous ennuient (ou si votre voisin de palier
 dort !), vous pouvez les remplacer par un flash de l'ecran, en  tapant
 Meta-x set-variable RET visible-bell RET t RET. Ou ajoutez cette ligne
 a votre .emacs pour faire taire Emacs a tout jamais :

        (setq visible-bell t)

 55..77..

 SSaauutt ddee rreeggiioonnss

 Il est possible de ne pas verifier votre document en  integralite,  en
 sautant  quelques  regions  bien  specifiques.  En effet, vous voudrez
 surement ne pas verifier l'orthographe de vos balises SGML. Pour cela,
 ajoutez la ligne suivante a votre .emacs :

       (setq ispell-skip-sgml t)

 Une  version Beta du 20 Mars 98  du fichier ispell.el est disponible a
 l'adresse    http://kdstevens.com/~stevens/ispell-page.html.     Cette
 version  etend  les  regions  SGML  a  sauter.  En  effet,  la version
 d'ispell.el fournie avec Emacs permet seulement  de  sauter  les  tags
 SGML, de la forme <<tttt>> ou <<//tttt>>.

 Cette version Beta permet de sauter egalement les regions entre :

 +o  <author> et la fin de la ligne,

 +o  < et / (pour les tags SGML de la forme <<eemm//......//,

 +o  <code> et </code>,

 +o  <verb> et </verb>,

 +o  <tt> et </tt>.

 66..

 PPoouurr aalllleerr pplluuss llooiinn

 66..11..

 IInnsseerrttiioonn aauuttoommaattiiqquuee dd''uunnee eenntteettee

 Sous Emacs, il est possible d'_a_c_c_r_o_c_h_e_r des actions a chaque evenement
 (ouverture d'un fichier, sauvegarde, lancement d'un mode, etc).

 La bibliotheque aauuttooiinnsseerrtt utilise cette fonctionnalite : lorsque vous
 ouvrez un nouveau fichier sous Emacs, cette bibliotheque insere, selon
 le type de ce fichier, une entete _s_t_a_n_d_a_r_d.

 Dans notre cas, cette entete _s_t_a_n_d_a_r_d pourrait bien etre la partie qui
 declare le type de document (LinuxDoc), le titre, l'auteur et la date.

 Je vais decrire ici deux facons d'inserer une telle entete.   Soit  en
 inserant  un  fichier  que  vous  aurez  prealablement  ecrit, soit en
 lancant une routine ecrite en eelliisspp.

 66..11..11..

 ppaarr ll''iinnsseerrttiioonn dd''uunn ffiicchhiieerr

 Il faut tout d'abord preciser a Emacs  d'executer  la  commande  auto-
 insert   a   l'ouverture  d'un  fichier,  puis  lire  la  bibliotheque
 aauuttooiinnsseerrtt qui declare la  liste  auto-insert-alist  qu'il  nous  faut
 modifier,  cette  derniere  definissant  pour  chaque  type de fichier
 l'entete a inserer. Le fichier a inserer doit par  defaut  se  trouver
 dans  le  repertoire  ~/insert/,  mais il est possible de redefinir la
 variable auto-insert-directory si l'on veut le placer ailleurs.

 Voici les lignes a rajouter a votre .emacs  pour  inserer  le  fichier
 ~/emacs/sgml-insert.sgml a l'ouverture d'un nouveau fichier SGML :

       (add-hook 'find-file-hooks 'auto-insert)
       (load-library "autoinsert")
       (setq auto-insert-directory "~/emacs/")
       (setq auto-insert-alist
             (append '((sgml-mode .  "sgml-insert.sgml"))
                     auto-insert-alist))

 Vous  pouvez  alors  ecrire  dans  le fichier ~/emacs/sgml-insert.sgml
 votre entete personnalisee, puis relancer Emacs et ouvrir  un  fichier
 toto.sgml.  Emacs devrait alors vous demander de confirmer l'insertion
 automatique, et dans l'affirmative inserer votre entete.

 66..11..22..

 ppaarr ll''eexxeeccuuttiioonn dd''uunnee rroouuttiinnee

 Cela fonctionne un peu comme precedemment, mais au  lieu  de  preciser
 dans  la  variable  auto-insert-alist  un  fichier  a inserer, il faut
 preciser une fonction a executer. Voici comment proceder, en supposant
 que  l'on ecrive cette fonction dans un fichier ~/emacs/sgml-header.el
 (inutile d'encombrer votre .emacs avec  cette  fonction  qui  peut  se
 reveler assez longue) :

       (add-hook 'find-file-hooks 'auto-insert)
       (load-library "autoinsert")
       (add-to-list 'load-path "~/emacs")
       (load-library "sgml-header")
       (setq auto-insert-alist
             (append '(((sgml-mode .  "SGML Mode") . insert-sgml-header))
                     auto-insert-alist))

 Vous  pourrez  trouver  en  ``appendice'' un exemple de cette fonction
 insert-sgml-header.

 GG..

 UUnnee ffoonnccttiioonn iinnsseerrtt--ssggmmll--hheeaaddeerr

 Cette  fonction  permet   a   l'utilisateur   d'inserer   une   entete
 personnalisee  pour  un document du Projet de Documentation Linux dans
 un fichier. Elle peut soit etre appelee automatiquement  lorsque  l'on
 ouvre  un  nouveau  fichier  SGML, soit etre appelee explicitement par
 l'utilisateur.

 Cette fonction demande a  l'utilisateur,  a  travers  le  _m_i_n_i_-_b_u_f_f_e_r,
 divers renseignements, certains necessaires, d'autres facultatifs.

 Tout  d'abord  le  titre.  Si  l'utilisateur  n'entre  aucun titre, la
 fonction retourne immediatement, et rien n'est insere.  Vient  ensuite
 la  date, l'auteur, son email et sa home page (ces deux derniers etant
 facultatifs).

 Il demande ensuite le nom du traducteur. S'il n'y a pas de  traducteur
 pour  ce  document, il suffit de presser _E_n_t_r_e_e, et les renseignements
 sur le traducteur ne seront pas demandes. Dans le  cas  contraire,  la
 fonction  demande  l'email  et  la  home  page  du  traducteur  (aussi
 facultatifs).

 Cette fonction affiche alors dans  le  buffer  courant  votre  entete,
 comportant bien sur tous les renseignements que vous avez cites mis en
 forme, mais aussi les balises necessaires au paragraphe d'introduction
 et  au  premier  chapitre,  puis  place le curseur a l'endroit ou vous
 pourrez saisir le paragraphe d'introduction.

 (defun insert-sgml-header ()
   "Insere l'entete d'un document LinuxDoc"
   (interactive)
   (let (titre auteur email home traducteur email-traducteur home-traducteur date
               point-debut)
     (setq titre (read-from-minibuffer "Titre : "))
     (if (> (length titre) 0)
         (progn
           (setq date (read-from-minibuffer "Date : ")
                 auteur (read-from-minibuffer "Auteur : ")
                 email (read-from-minibuffer "Email auteur : ")
                 home (read-from-minibuffer "Home page auteur : http://")
                 traducteur (read-from-minibuffer "Traducteur : "))
           (insert "<!doctype linuxdoc system>\n<article>\n<title>")
           (insert titre)
           (insert "</title>\n<author>\nAuteur : ") (insert auteur) (insert "<newline>\n")
           (if (> (length email) 0)
               (progn
                 (insert "<htmlurl url=\"mailto:")
                 (insert email) (insert "\" name=\"") (insert email)
                 (insert "\"><newline>\n")))
           (if (> (length home) 0)
               (progn
                 (insert "<htmlurl url=\"http://")
                 (insert home) (insert "\" name=\"") (insert home)
                 (insert "\">\n<newline>")))
           (if (> (length traducteur) 0)
               (progn
                 (setq email-traducteur (read-from-minibuffer "Email traducteur : ")
                       home-traducteur (read-from-minibuffer "Home page traducteur : http://"))
                 (insert "Traducteur : ")
                 (insert traducteur)
                 (insert "<newline>\n")
                 (if (> (length email-traducteur) 0)
                     (progn
                       (insert "<htmlurl url=\"mailto:")
                       (insert email-traducteur) (insert "\" name=\"")
                       (insert email-traducteur)
                       (insert "\"><newline>\n")))
                 (if (> (length home-traducteur) 0)
                     (progn
                       (insert "<htmlurl url=\"http://")
                       (insert home-traducteur) (insert "\" name=\"")
                       (insert home-traducteur)
                       (insert "\"><newline>\n")))))
           (insert "</author>\n<date>\n")
           (insert date)
           (insert "\n</date>\n\n<abstract>\n")
           (setq point-debut (point))
           (insert "\n</abstract>\n<toc>\n\n<sect>\n<p>\n\n\n</sect>\n\n</article>\n")
           (goto-char point-debut)
           ))))