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)
))))