LinuxDoc+Emacs+Ispell-HOWTO Auteur : Philippe MARTIN (feloy@wanadoo.fr) 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) ))))