This file is indexed.

/usr/share/doc/HOWTO/fr-html/LinuxDoc+Emacs+Ispell-HOWTO.html is in doc-linux-fr-html 2013.01-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.69">
<title>LinuxDoc+Emacs+Ispell-HOWTO</title>
</head>
<body>
<h1>LinuxDoc+Emacs+Ispell-HOWTO</h1>
<h2>Auteur : Philippe MARTIN ( <a href=
"mailto:feloy@wanadoo.fr">feloy@wanadoo.fr</a>)</h2>
v0.5, 28 Avril 1998
<hr>
<em>Ce document s'adresse aux traducteurs et r&eacute;dacteurs de
HOWTO Linux ou de toute autre documentation du Projet de
Documentation Linux. Il donne &agrave; ces derniers des trucs et
astuces pour l'utilisation entre autre d'Emacs et d'Ispell.</em>
<hr>
<h2>Appendix</h2>
<h2><a name="s1">1. Pr&eacute;ambule</a></h2>
<h2><a name="ss1.1">1.1 Copyright</a></h2>
<p>Copyright Philippe Martin 1998<br>
Vous pouvez redistribuer et/ou modifier ce document selon les
conditions de la GNU General Public Licence, version 2 ou
ult&eacute;rieure.</p>
<h2><a name="ss1.2">1.2 Remerciements</a></h2>
<p>Je remercie tout particuli&egrave;rement S&eacute;bastien
Blondeel pour m'avoir pos&eacute; tant de questions si pertinentes
sur la configuration d'Emacs, questions qui m'ont permises de
concr&eacute;tiser mes connaissances sur le sujet et de vous en
faire part.</p>
<h2><a name="ss1.3">1.3 Remarques</a></h2>
<p>N'h&eacute;sitez pas &agrave; me faire parvenir toute remarque
et/ou critique sur ce document, je les examinerai afin de faire
&eacute;voluer au mieux ce document.<br>
N'h&eacute;sitez pas non plus &agrave; me poser des questions
relatives au sujet trait&eacute; dans cet HOWTO, j'y
r&eacute;pondrai avec un int&eacute;r&ecirc;t tout particulier.</p>
<h2><a name="ss1.4">1.4 Versions</a></h2>
<p>Ce document traite des versions suivantes&nbsp;:</p>
<ul>
<li>Sgml-tools version 0.99,</li>
<li>Emacs version 19.34,</li>
<li>Ispell version 3.1,</li>
<li>Toutes les biblioth&egrave;ques Emacs auxquelles je fais
r&eacute;f&eacute;rence sont celles distribu&eacute;es avec la
version d'Emacs pr&eacute;cit&eacute;e, sauf <code>iso-sgml</code>
distribu&eacute;e avec XEmacs et <code>psgml</code>
distribu&eacute;e seule.</li>
</ul>
<h2><a name="s2">2. Introduction</a></h2>
<h2><a name="ss2.1">2.1 Le langage SGML</a></h2>
<p>Le langage <b>SGML</b> (<i>Standard Generalized Markup
Language</i>) est un langage qui permet de d&eacute;finir des types
de documents.</p>
<p>On peut par exemple d&eacute;finir gr&acirc;ce &agrave; lui un
type de document <i>recette de cuisine</i>, qui pr&eacute;cisera
qu'il faudra y inclure une premi&egrave;re partie avec les
diff&eacute;rents ingr&eacute;dients, puis une deuxi&egrave;me avec
les accessoires, une troisi&egrave;me donnant la fa&ccedil;on de
faire votre g&acirc;teau pas &agrave; pas, et enfin une belle photo
qui montre le r&eacute;sultat final.</p>
<p>Cette d&eacute;finition d'un type de document est appel&eacute;
<b>DTD</b> (<i>Document Type Definition</i>). Elle ne permet pas de
d&eacute;finir quelle sera l'allure du document final, mais
seulement ce qu'il contiendra ou pourra contenir.</p>
<p>Pour reprendre l'exemple pr&eacute;c&eacute;dent, je suis
s&ucirc;r qu'en lisant l'id&eacute;e que je me fais d'une recette
de cuisine, vous avez reconnu celles que vous ou votre cuistot
attitr&eacute; utilisez. Et pourtant, elles ont une allure
compl&egrave;tement diff&eacute;rente&nbsp;: les miennes ont une
photo qui se trouve en haut &agrave; gauche du placard de la salle
de bain, et la liste des ingr&eacute;dients se trouve entre les
bouteilles de lait et de gaz au fond du jardin. Et les
v&ocirc;tres&nbsp;?</p>
<p>Gr&acirc;ce &agrave; cette d&eacute;finition type, quelqu'un
peut &eacute;crire son document, sans tenir compte de la forme
qu'il aura quand il arrivera devant les yeux du lecteur.</p>
<h2><a name="ss2.2">2.2 La d&eacute;finition du type
<code>LinuxDoc</code></a></h2>
<p>Ce type permet d'&eacute;crire, vous l'aviez devin&eacute;, des
documents se reportant &agrave; Linux.</p>
<p>Ces documents sont en g&eacute;n&eacute;ral construits
ainsi&nbsp;: ils commencent par un titre suivi de l'auteur, de la
date de diffusion et de la version de ce document. Suit juste
apr&egrave;s un court paragraphe qui explique bri&egrave;vement ce
que contient ce document (ce qui &eacute;vite 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 mati&egrave;res qui montre plus en
d&eacute;tail son contenu et permet aux plus press&eacute;s d'aller
voir directement ce qu'ils cherchent.</p>
<p>Et vient ensuite une suite de chapitres, sections, paragraphes.
Au milieu de ces paragraphes, on peut ins&eacute;rer des morceaux
de programme, ou changer de police de caract&egrave;res pour faire
ressortir un mot ou un passage, ou encore y ins&eacute;rer des
listes, faire r&eacute;f&eacute;rence &agrave; une autre partie du
document, et d'autres choses encore.</p>
<p>Pour &eacute;crire un tel document, il suffit alors de
pr&eacute;ciser au bon moment le titre, l'auteur, la date et la
version du document, puis les chapitres et sections, dire quand il
faut ins&eacute;rer une liste et quels en sont les
&eacute;l&eacute;ments, et ainsi de suite.</p>
<h2><a name="ss2.3">2.3 Les <code>SGML-Tools</code></a></h2>
<p>Les <b>SGML-Tools</b> permettent, &agrave; partir de cette
sp&eacute;cification du document, d'obtenir le document final dans
le format que vous pr&eacute;f&eacute;rez. Si vous voulez l'ajouter
&agrave; votre biblioth&egrave;que personnelle, ce sera
s&ucirc;rement du <i>PostScript</i>, si vous voulez le faire
partager au reste de la plan&egrave;te &agrave; travers le Web,
pourquoi pas du <i>HTML</i>, ou si vous craquez et voulez le lire
sous Windows, vous pouvez toujours l'avoir en <i>RTF</i> pour
pouvoir le lire sous n'importe quel &eacute;diteur de texte. Ou
peut-&ecirc;tre sous chacun de ces formats, si vous avez des
humeurs changeantes.</p>
<p>La distribution SGML-Tools peut &ecirc;tre
r&eacute;cup&eacute;r&eacute;e via FTP anonyme dans le
r&eacute;pertoire <a href=
"ftp://ftp.lip6.fr/pub/sgml-tools/">ftp://ftp.lip6.fr/pub/sgml-tools/</a></p>
<h2><a name="s3">3. Votre premier document</a></h2>
<h2><a name="ss3.1">3.1 Depuis un document au format texte</a></h2>
<p>Si vous poss&eacute;dez un document au format texte que vous
d&eacute;sirez formater en SGML pour ensuite le transformer en
divers formats, voici la marche &agrave; suivre&nbsp;:</p>
<ol>
<li>Ajoutez au tout d&eacute;but du fichier les lignes
suivantes&nbsp;:
<pre>
        &lt;!doctype linuxdoc system&gt;
        &lt;article&gt;
        &lt;title&gt;le titre ici&lt;/title&gt;
        &lt;author&gt;
        le nom de l'auteur, son email
        &lt;/author&gt;
        &lt;date&gt;
        la version et la date du document
        &lt;/date&gt;
       
</pre></li>
<li>S'il y a au tout d&eacute;but du document un court paragraphe
qui d&eacute;crit bri&egrave;vement le contenu de ce document,
encadrez ce paragraphe avec les balises
<code>&lt;abstract&gt;</code> et
<code>&lt;/abstract&gt;</code>.</li>
<li>Ajoutez juste &agrave; la suite la balise
<code>&lt;toc&gt;</code>, qui ins&egrave;re automatiquement la
table des mati&egrave;res.</li>
<li>Au d&eacute;but de chaque nouveau chapitre, remplacez la ligne
contenant le num&eacute;ro et le titre du chapitre par&nbsp;:
<pre>
       &lt;sect&gt;le titre du chapitre
       
</pre>
et rajoutez la balise <code>&lt;/sect&gt;</code> &agrave; la fin du
chapitre.<br>
<b>Note&nbsp;:</b> Il n'est pas n&eacute;cessaire d'indiquer le
num&eacute;ro du chapitre, car ils sont num&eacute;rot&eacute;s
automatiquement.</li>
<li>Faites la m&ecirc;me chose pour les sections, en
rempla&ccedil;ant le num&eacute;ro et le titre par
<code>&lt;sect1&gt;</code> et en rajoutant
<code>&lt;/sect1&gt;</code> &agrave; la fin de la section.</li>
<li>Il est possible de cr&eacute;er des sous-sections jusqu'au
niveau 4 (avec <code>&lt;sect4&gt;</code> et
<code>&lt;/sect4&gt;</code>) en op&eacute;rant de la m&ecirc;me
mani&egrave;re.</li>
<li>&Agrave; chaque d&eacute;but de paragraphe, ajoutez la balise
<code>&lt;p&gt;</code>.</li>
<li>Si vous d&eacute;sirez mettre en valeur certains mots ou
certaines phrases, entourez-les des balises <code>&lt;it&gt;</code>
et <code>&lt;/it&gt;</code> (<i>italique</i>), ou
<code>&lt;bf&gt;</code> et <code>&lt;/bf&gt;</code> (<b>gras</b>),
ou encore <code>&lt;tt&gt;</code> et <code>&lt;/tt&gt;</code>
(<code>caract&egrave;res de machine &agrave; &eacute;crire
d'antan</code>).</li>
<li>Lorsqu'une liste appara&icirc;t dans le texte, comme celle-ci
par exemple&nbsp;:
<pre>
        Voici une liste :

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

        de quatre lignes !
       
</pre>
il faut la remplacer par&nbsp;:
<pre>
        Voici une liste :
       &lt;itemize&gt;
       &lt;item&gt;d'une ligne,
       &lt;item&gt;ah non, deux,
       &lt;item&gt;tiens, trois,
       &lt;item&gt;c'est tout.
        &lt;/itemize&gt;
        de quatre lignes !
       
</pre></li>
<li>Lorsqu'un bloc repr&eacute;sente une partie de programme, ou
autre chose que l'on veut faire ressortir&nbsp;:
<pre>
       &lt;verb&gt;
        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'apr&egrave;s toi ?",M$
        60 IF M$="Bill" THEN PRINT "Tu es un sage":GOTO AUPARADIS
        70 ELSE PRINT "Tu n'as rien compris...":GOTO AUPAYSDUDOLLAR
        &lt;/verb&gt;
       
</pre></li>
<li>Arriv&eacute; &agrave; ce point, vous avez d&eacute;j&agrave;
bien avanc&eacute; votre formatage en SGML. Vous pourrez, si vous
voulez affiner votre document, jeter un oeil sur le guide
d'utilisation des <b>SGML-Tools</b>, qui d&eacute;crit plus en
d&eacute;tail le type de document <b>LinuxDoc</b>.</li>
</ol>
<h2><a name="s4">4. Configurer <code>Emacs</code></a></h2>
<h2><a name="ss4.1">4.1 Les caract&egrave;res
accentu&eacute;s</a></h2>
<p>Si vous d&eacute;sirez &eacute;crire des documents en
fran&ccedil;ais ou dans une autre langue europ&eacute;enne, vous
aurez besoin de caract&egrave;res accentu&eacute;s. Voici comment
configurer Emacs pour qu'il accepte ces caract&egrave;res.</p>
<h3>L'affichage des caract&egrave;res 8 bits</h3>
<p>Pour qu'Emacs soit capable d'afficher des caract&egrave;res 8
bits, ajoutez les lignes suivantes &agrave; votre
<code>.emacs</code>&nbsp;:</p>
<pre>
       (standard-display-european 1)
       (load-library "iso-syntax")
      
</pre>
<p>Si vous utilisez Emacs sur un terminal qui ne supporte pas
l'affichage des caract&egrave;res 8 bits, vous pouvez utiliser la
biblioth&egrave;que <code>iso-ascii</code> (<code>(load-library
"iso-ascii")</code>), qui permet &agrave; Emacs d'afficher les
caract&egrave;res 8 bits d'une fa&ccedil;on approch&eacute;e.</p>
<h3>La saisie des caract&egrave;res accentu&eacute;s</h3>
<p>Si votre clavier permet de taper les caract&egrave;res
accentu&eacute;s, aucun probl&egrave;me ne devrait se poser. En
revanche, s'il ne le permet pas, voici quelques moyens d'y
rem&eacute;dier&nbsp;:</p>
<h3>La biblioth&egrave;que <code>iso-acc</code></h3>
<p>La biblioth&egrave;que <code>iso-acc</code> d'Emacs permet
d'entrer des caract&egrave;res accentu&eacute;s malgr&eacute; que
l'on ait un clavier qui ne le permette a priori pas.</p>
<p>Pour utiliser cette biblioth&egrave;que, ajoutez la ligne
suivante &agrave; votre <code>.emacs</code>&nbsp;:</p>
<pre>
        (load-library "iso-acc")
       
</pre>
<p>Puis, une fois avoir relanc&eacute; Emacs et ouvert le fichier
que vous voulez &eacute;diter, tapez <code>Meta-x
iso-accents-mode</code>.</p>
<p>Vous pouvez alors entrer un caract&egrave;re <b>&eacute;</b> en
tapant <b>'</b> puis <code>e</code>. De mani&egrave;re
g&eacute;n&eacute;rale, on peut entrer un caract&egrave;re
accentu&eacute; en tapant d'abord l'accent, puis la lettre &agrave;
accentuer (aussi bien minuscule que majuscule). Voici les
diff&eacute;rents accents utilisables&nbsp;:</p>
<ul>
<li><code>'</code>&nbsp;: Un accent aigu</li>
<li><code>`</code>&nbsp;: Un accent grave</li>
<li><code>^</code>&nbsp;: Un accent circonflexe</li>
<li><code>"</code>&nbsp;: Un tr&eacute;ma</li>
<li><code>~</code>&nbsp;: Un tilde au dessus de la lettre, une
c&eacute;dille lorsqu'il pr&eacute;c&egrave;de un c, et d'autres
encore (voir fichier iso-acc.el),</li>
<li><code>/</code>&nbsp;: Pour barrer une lettre, ...</li>
</ul>
<p>Si vous avez besoin d'entrer un de ces caract&egrave;res et non
pas une lettre accentu&eacute;e, tapez un espace &agrave; la suite
de l'accent. Par exemple, pour taper
<i>l'&eacute;l&eacute;phant</i>, tapez <code>l ' spc ' e l ' e
...</code></p>
<p>Vous pouvez trouver l'ensemble des combinaisons dans le fichier
<code>iso-acc.el</code>.</p>
<h3>La touche Meta</h3>
<p>Il est possible avec certains terminaux de saisir des
caract&egrave;res accentu&eacute;s gr&acirc;ce &agrave; la touche
Meta (ou Alt). Par exemple, la frappe de <b>Meta-i</b> permet
d'entrer le caract&egrave;re <b>&eacute;</b>.</p>
<p>Mais Emacs pr&eacute;voit la touche Meta pour d'autres
utilisations. Il faut donc taper la s&eacute;quence <b>Ctrl-q</b>
(commande <code>quoted-insert</code>) avant de taper
<b>Meta-i</b>.</p>
<p>Cette commande permet aussi d'entrer un caract&egrave;re selon
son code en octal. Tapez <b>Ctrl-q</b> suivi du code en octal du
caract&egrave;re que vous d&eacute;sirez entrer.</p>
<h3>Afficher les caract&egrave;res SGML en 8 bits</h3>
<p>En SGML, les caract&egrave;res accentu&eacute;s peuvent
&ecirc;tre tap&eacute;s gr&acirc;ce &agrave; des macros. Par
exemple, le caract&egrave;re <b>&eacute;</b> s'&eacute;crit
<b>&amp;eacute;</b>. En g&eacute;n&eacute;ral, les applications qui
lisent du SGML arrivent &agrave; lire les caract&egrave;res 8 bits
et il n'est donc pas n&eacute;cessaire d'utiliser ces macros. Mais
il est possible que certaines ne le puissent pas. En sachant qu'il
existe un moyen facile de rem&eacute;dier &agrave; &ccedil;a, ce
serait dommage de faire "planter" ces derni&egrave;res
applications.</p>
<p>En effet, la biblioth&egrave;que <code>iso-sgml</code> vous
permet d'entrer sous Emacs des caract&egrave;res accentu&eacute;s,
comme d'habitude, mais lorsqu'il enregistre votre fichier, il
transforme tous ces caract&egrave;res 8 bits par leur
&eacute;quivalent SGML.</p>
<p>Il est donc tr&egrave;s facile, gr&acirc;ce &agrave; cette
biblioth&egrave;que, de saisir et relire votre document sous Emacs,
et vous &ecirc;tes s&ucirc;r que votre document ne sera pas
rejet&eacute; par une application qui ne comprend pas les
caract&egrave;res 8 bits.</p>
<p>Pour utiliser cette biblioth&egrave;que, il suffit de rajouter
ces lignes &agrave; votre <code>.emacs</code>&nbsp;:</p>
<pre>
       (setq sgml-mode-hook
       '(lambda () "D&eacute;fauts pour le mode SGML."
       (load-library "iso-sgml")))
      
</pre>
<h2><a name="ss4.2">4.2 Le mode SGML</a></h2>
<p>Lorsque vous ouvrez un fichier avec une extension <b>.sgml</b>,
Emacs lance normalement le <b>mode sgml</b>. S'il ne le fait pas,
vous pouvez soit le faire manuellement avec <code>Meta-x
sgml-mode</code>, soit le lancer automatiquement en rajoutant ces
lignes &agrave; votre <code>.emacs</code>&nbsp;:</p>
<pre>
      (setq auto-mode-alist
      (append '(("\.sgml$"  . sgml-mode))
                auto-mode-alist))
     
</pre>
<p>Ce mode permet par exemple de choisir comment ins&eacute;rer les
caract&egrave;res 8 bits. En utilisant <code>Meta-x
sgml-name-8bit-mode</code> (ou dans le menu <i>SGML/Toggle 8 bit
insertion</i>), vous pouvez choisir d'ins&eacute;rer les
caract&egrave;res 8 bits soit tels quels, soit sous leur forme
SGML, c'est-&agrave;-dire sous la forme <b>&amp;...;</b>.</p>
<p>Il permet aussi de cacher ou non les balises SGML, avec
<code>Meta-x sgml-tags-invisible</code> ou le menu <i>SGML/Toggle
Tag Visibility</i>.</p>
<h2><a name="ss4.3">4.3 Le mode PSGML</a></h2>
<p>Le mode PSGML donne de grandes facilit&eacute;s pour
&eacute;diter des documents SGML sous Emacs.</p>
<p>La documentation <a href=
"http://www.linux-france.com/article/psgml-linuxdoc">psgml-linuxdoc</a>
explique comment installer et utiliser ce mode conjointement avec
<i>LinuxDoc</i>.</p>
<h2><a name="ss4.4">4.4 Divers</a></h2>
<h3>Le mode auto-fill</h3>
<p>En mode normal, lorsque vous tapez un paragraphe et que vous
arrivez en bout de ligne, vous devez vous-m&ecirc;me utiliser la
touche Entr&eacute;e pour revenir &agrave; la ligne, ou bien votre
ligne continue ind&eacute;finiment tout le long du paragraphe. Il
en r&eacute;sulte, si vous utilisez Entr&eacute;e pour revenir
&agrave; la ligne, un paragraphe dont les fins de lignes ne sont
pas align&eacute;es, et en g&eacute;n&eacute;ral ces lignes
rallongent ou raccourcissent au fur et &agrave; mesure. De
m&ecirc;me si vous laissez des lignes d&eacute;passer une longueur
raisonnable, vous ne pourrez pas les voir sous certains
&eacute;diteurs.</p>
<p>Le mode <b>auto-fill</b> permet d'automatiser cette t&acirc;che
ingrate&nbsp;: lorsque vous d&eacute;passez une certaine colonne
(la 70e par d&eacute;faut), il vous place automatiquement &agrave;
la ligne suivante.</p>
<p>Voici comment utiliser ce mode, et fixer la largeur de vos
lignes &agrave; 80&nbsp;:</p>
<pre>
       (setq sgml-mode-hook
       '(lambda () "D&eacute;fauts pour le mode SGML."
       (auto-fill-mode) 
       (setq fill-column 80)))
      
</pre>
<h2><a name="s5">5. Ispell</a></h2>
<p>Si vous d&eacute;sirez v&eacute;rifier l'orthographe de votre
document directement depuis Emacs, vous pouvez utiliser la
distribution <b>Ispell</b> et son mode associ&eacute; sous
Emacs.</p>
<h2><a name="ss5.1">5.1 Configuration initiale</a></h2>
<p>Tout d'abord, ajoutez ces lignes &agrave; votre
<code>.emacs</code> pour configurer Emacs&nbsp;:</p>
<pre>
      (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.")
      
</pre>
<h2><a name="ss5.2">5.2 Le choix de vos dictionnaires par
d&eacute;faut</a></h2>
<p>Vous pouvez configurer Emacs pour qu'&agrave; l'ouverture d'un
fichier, celui-ci choisisse automatiquement quels dictionnaires
utiliser. Vous pouvez en effet utiliser plusieurs dictionnaires. Le
premier et s&ucirc;rement le plus important est le dictionnaire
principal, distribu&eacute; avec Ispell. Vous avez le choix entre
plusieurs langues. Le deuxi&egrave;me est votre dictionnaire
personnel, celui o&ugrave; Ispell ajoutera les mots qu'il n'aura
pas trouv&eacute; dans le premier dictionnaire mais que vous lui
aurez indiqu&eacute; de garder.</p>
<p>Voici les lignes &agrave; ins&eacute;rer &agrave; votre
<code>.emacs</code> si vous d&eacute;sirez utiliser par
d&eacute;faut le dictionnaire fran&ccedil;ais distribu&eacute; avec
Ispell, et placer votre dictionnaire personnel dans un fichier
<code>.ispell-dico-perso</code> dans votre r&eacute;pertoire
racine.</p>
<pre>
       (setq sgml-mode-hook
      '(lambda () "D&eacute;fauts pour le mode SGML."
      (setq ispell-personal-dictionary "~/.ispell-dico-perso")
      (ispell-change-dictionary "francais")
       ))
       
</pre>
<h2><a name="ss5.3">5.3 Choix des dictionnaires pour un certain
fichier</a></h2>
<p>Un petit probl&egrave;me se pose si vous ne v&eacute;rifiez pas
toujours des textes dans la m&ecirc;me langue. Et si vous traduisez
des documents, il est probable que vous passiez d'une langue
&agrave; l'autre assez souvent.</p>
<p>Je ne connais pas de moyen en Lisp de choisir, soit
automatiquement, soit en un <em>click</em> de souris, les
dictionnaires principaux et personnels associ&eacute;s &agrave; la
langue utilis&eacute;e dans le fichier en cours. (Si vous en
connaissez un, faites-moi signe !)</p>
<p>Mais il est possible d'indiquer quels dictionnaires vous voulez
utiliser pour ce fichier (et seulement celui-l&agrave;). Il suffit
de les rajouter en commentaire, &agrave; la fin du fichier, pour
qu'Ispell puisse les lire en lan&ccedil;ant une
v&eacute;rification&nbsp;:</p>
<pre>
      &lt;!-- Local IspellDict: english --&gt;
      &lt;!-- Local IspellPersDict: ~/emacs/.ispell-english --&gt;
     
</pre>
<p>Si vous avez d&eacute;fini dans votre <code>.emacs</code> que
vos dictionnaires par d&eacute;faut seront fran&ccedil;ais, vous
pouvez alors ajouter ces lignes &agrave; chaque fin de fichier dont
le texte est en anglais.</p>
<h2><a name="ss5.4">5.4 V&eacute;rifier votre document</a></h2>
<p>Pour lancer la v&eacute;rification de votre document en
int&eacute;gralit&eacute;, utilisez, depuis n'importe o&ugrave;
dans votre document <code>Meta-x ispell-buffer</code>. Vous pouvez
aussi lancer la v&eacute;rification sur une r&eacute;gion seulement
du document&nbsp;:</p>
<ul>
<li>Indiquez le d&eacute;but de la r&eacute;gion avec
<code>Ctrl-Spc</code> (mark-set-command),</li>
<li>Placez-vous &agrave; la fin de la r&eacute;gion &agrave;
v&eacute;rifier,</li>
<li>tapez <code>Meta-x ispell-region</code>.</li>
</ul>
<p>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&nbsp;:</p>
<ul>
<li><b>spc</b> accepte ce mot, uniquement pour cette fois,</li>
<li><b>i</b> accepte ce mot et l'ins&egrave;re dans votre
dictionnaire personnel,</li>
<li><b>a</b> accepte ce mot pour cette session,</li>
<li><b>A</b> accepte ce mot pour ce fichier, en l'ins&eacute;rant
dans le dictionnaire local au fichier,</li>
<li><b>r</b> permet de corriger le mot mal
orthographi&eacute;,</li>
<li><b>R</b> permet de corriger toutes les occurrences du mot mal
orthographi&eacute;,</li>
<li><b>x</b> arr&ecirc;te la v&eacute;rification, et replace le
curseur &agrave; sa position initiale,</li>
<li><b>X</b> arr&ecirc;te la v&eacute;rification en laissant le
curseur sur le mot mal orthographi&eacute;, vous permettant de
modifier votre fichier&nbsp;; vous pouvez continuer la
v&eacute;rification en tapant <code>Meta-x
ispell-continue</code>,</li>
<li><b>?</b> affiche une aide en ligne.</li>
</ul>
<p>Si Ispell trouve un ou plusieurs mots ressemblant &agrave; celui
qu'il ne connait pas, il vous les indique dans une petite
fen&ecirc;tre, chacun pr&eacute;c&eacute;d&eacute; d'un chiffre. Il
suffit de presser un de ces chiffres pour corriger le mot mal
orthographi&eacute; par le mot correspondant.</p>
<h2><a name="ss5.5">5.5 Dictionnaire personnel contre dictionnaire
local au fichier</a></h2>
<p>La touche <b>i</b> permet d'ins&eacute;rer un mot dans le
dictionnaire personnel, alors que la touche <b>A</b> permet
d'ins&eacute;rer un mot dans le dictionnaire local au fichier.</p>
<p>Le dictionnaire local au fichier est une suite de mots
ins&eacute;r&eacute;s &agrave; 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.</p>
<p>A mon avis, il est pr&eacute;f&eacute;rable que le dictionnaire
personnel soit r&eacute;serv&eacute; aux mots que le dictionnaire
principal ne connait pas mais qui font vraiment partie de la langue
(comme les mots compos&eacute;s), plus certains mots n'appartenant
pas &agrave; la langue ou noms propres qui reviennent dans un grand
nombre de fichiers (comme <i>Linux</i>) et ne ressemblant pas trop
&agrave; un mot du dictionnaire principal&nbsp;: l'ajout par
exemple de certains noms et pr&eacute;noms de personnes dans le
dictionnaire personnel peut &ecirc;tre dangereux, car ils
ressemblent parfois &agrave; un mot de la langue (imaginez qu'il ne
trouve pas de fautes dans la phrase&nbsp;: `<i>Ted en est l'effet
au phil du temps.'</i> !).</p>
<h2><a name="ss5.6">5.6 La v&eacute;rification `&agrave; la
vol&eacute;e'</a></h2>
<p>Ispell peut aussi v&eacute;rifier l'orthographe au fur et
&agrave; mesure que vous tapez votre document. Il faut utiliser
pour cela le mode <b>ispell-minor-mode</b>. Lorsque vous
d&eacute;sirez lancer ou arr&ecirc;ter ce mode de
v&eacute;rification, tapez <code>Meta-x ispell-minor-mode</code>.
Ispell vous envoie alors un <i>bip</i> chaque fois que vous tapez
un mot qu'il ne connait pas.</p>
<p>Si ces <i>bip</i> &agrave; r&eacute;p&eacute;tition vous
ennuient (ou si votre voisin de palier dort !), vous pouvez les
remplacer par un flash de l'&eacute;cran, en tapant <code>Meta-x
set-variable RET visible-bell RET t RET</code>. Ou ajoutez cette
ligne &agrave; votre <code>.emacs</code> pour faire taire Emacs
&agrave; tout jamais&nbsp;:</p>
<pre>
       (setq visible-bell t)
      
</pre>
<h2><a name="ss5.7">5.7 Saut de r&eacute;gions</a></h2>
<p>Il est possible de ne pas v&eacute;rifier votre document en
int&eacute;gralit&eacute;, en sautant quelques r&eacute;gions bien
sp&eacute;cifiques. En effet, vous voudrez s&ucirc;rement ne pas
v&eacute;rifier l'orthographe de vos balises SGML. Pour cela,
ajoutez la ligne suivante &agrave; votre
<code>.emacs</code>&nbsp;:</p>
<pre>
      (setq ispell-skip-sgml t)  
     
</pre>
<p>Une version Beta du 20 Mars 98 du fichier <code>ispell.el</code>
est disponible &agrave; l'adresse <a href=
"http://kdstevens.com/~stevens/ispell-page.html">http://kdstevens.com/~stevens/ispell-page.html</a>.
Cette version &eacute;tend les r&eacute;gions SGML &agrave; sauter.
En effet, la version d'<code>ispell.el</code> fournie avec Emacs
permet seulement de sauter les tags SGML, de la forme
<b>&lt;tt&gt;</b> ou <b>&lt;/tt&gt;</b>.</p>
<p>Cette version Beta permet de sauter &eacute;galement les
r&eacute;gions entre&nbsp;:</p>
<ul>
<li>&lt;author&gt; et la fin de la ligne,</li>
<li>&lt; et / (pour les tags SGML de la forme
<b>&lt;em/.../</b>,</li>
<li>&lt;code&gt; et &lt;/code&gt;,</li>
<li>&lt;verb&gt; et &lt;/verb&gt;,</li>
<li>&lt;tt&gt; et &lt;/tt&gt;.</li>
</ul>
<h2><a name="s6">6. Pour aller plus loin</a></h2>
<h2><a name="ss6.1">6.1 Insertion automatique d'une
ent&ecirc;te</a></h2>
<p>Sous Emacs, il est possible d'<em>accrocher</em> des actions
&agrave; chaque &eacute;v&eacute;nement (ouverture d'un fichier,
sauvegarde, lancement d'un mode, etc).</p>
<p>La biblioth&egrave;que <b>autoinsert</b> utilise cette
fonctionnalit&eacute;&nbsp;: lorsque vous ouvrez un nouveau fichier
sous Emacs, cette biblioth&egrave;que ins&egrave;re, selon le type
de ce fichier, une ent&ecirc;te <em>standard</em>.</p>
<p>Dans notre cas, cette ent&ecirc;te <em>standard</em> pourrait
bien &ecirc;tre la partie qui d&eacute;clare le type de document
(LinuxDoc), le titre, l'auteur et la date.</p>
<p>Je vais d&eacute;crire ici deux fa&ccedil;ons d'ins&eacute;rer
une telle ent&ecirc;te. Soit en ins&eacute;rant un fichier que vous
aurez pr&eacute;alablement &eacute;crit, soit en lan&ccedil;ant une
routine &eacute;crite en <b>elisp</b>.</p>
<h3>par l'insertion d'un fichier</h3>
<p>Il faut tout d'abord pr&eacute;ciser &agrave; Emacs
d'ex&eacute;cuter la commande <code>auto-insert</code> &agrave;
l'ouverture d'un fichier, puis lire la biblioth&egrave;que
<b>autoinsert</b> qui d&eacute;clare la liste
<code>auto-insert-alist</code> qu'il nous faut modifier, cette
derni&egrave;re d&eacute;finissant pour chaque type de fichier
l'ent&ecirc;te &agrave; ins&eacute;rer. Le fichier &agrave;
ins&eacute;rer doit par d&eacute;faut se trouver dans le
r&eacute;pertoire <code>~/insert/</code>, mais il est possible de
red&eacute;finir la variable <code>auto-insert-directory</code> si
l'on veut le placer ailleurs.</p>
<p>Voici les lignes &agrave; rajouter &agrave; votre
<code>.emacs</code> pour ins&eacute;rer le fichier
<code>~/emacs/sgml-insert.sgml</code> &agrave; l'ouverture d'un
nouveau fichier SGML&nbsp;:</p>
<pre>
      (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))
      
</pre>
<p>Vous pouvez alors &eacute;crire dans le fichier
<code>~/emacs/sgml-insert.sgml</code> votre ent&ecirc;te
personnalis&eacute;e, puis relancer Emacs et ouvrir un fichier
<code>toto.sgml</code>. Emacs devrait alors vous demander de
confirmer l'insertion automatique, et dans l'affirmative
ins&eacute;rer votre ent&ecirc;te.</p>
<h3>par l'ex&eacute;cution d'une routine</h3>
<p>Cela fonctionne un peu comme pr&eacute;c&eacute;demment, mais au
lieu de pr&eacute;ciser dans la variable
<code>auto-insert-alist</code> un fichier &agrave; ins&eacute;rer,
il faut pr&eacute;ciser une fonction &agrave; ex&eacute;cuter.
Voici comment proc&eacute;der, en supposant que l'on &eacute;crive
cette fonction dans un fichier <code>~/emacs/sgml-header.el</code>
(inutile d'encombrer votre <code>.emacs</code> avec cette fonction
qui peut se r&eacute;v&eacute;ler assez longue)&nbsp;:</p>
<pre>
      (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))
      
</pre>
<p>Vous pourrez trouver en <a href=
"#insert-sgml-header">appendice</a> un exemple de cette fonction
<code>insert-sgml-header</code>.</p>
<h2><a name="insert-sgml-header"></a> <a name="s7">7. Une fonction
<code>insert-sgml-header</code></a></h2>
<p>Cette fonction permet &agrave; l'utilisateur d'ins&eacute;rer
une ent&ecirc;te personnalis&eacute;e pour un document du Projet de
Documentation Linux dans un fichier. Elle peut soit &ecirc;tre
appel&eacute;e automatiquement lorsque l'on ouvre un nouveau
fichier SGML, soit &ecirc;tre appel&eacute;e explicitement par
l'utilisateur.</p>
<p>Cette fonction demande &agrave; l'utilisateur, &agrave; travers
le <em>mini-buffer</em>, divers renseignements, certains
n&eacute;cessaires, d'autres facultatifs.</p>
<p>Tout d'abord le titre. Si l'utilisateur n'entre aucun titre, la
fonction retourne imm&eacute;diatement, et rien n'est
ins&eacute;r&eacute;. Vient ensuite la date, l'auteur, son email et
sa home page (ces deux derniers &eacute;tant facultatifs).</p>
<p>Il demande ensuite le nom du traducteur. S'il n'y a pas de
traducteur pour ce document, il suffit de presser
<em>Entr&eacute;e</em>, et les renseignements sur le traducteur ne
seront pas demand&eacute;s. Dans le cas contraire, la fonction
demande l'email et la home page du traducteur (aussi
facultatifs).</p>
<p>Cette fonction affiche alors dans le buffer courant votre
ent&ecirc;te, comportant bien s&ucirc;r tous les renseignements que
vous avez cit&eacute;s mis en forme, mais aussi les balises
n&eacute;cessaires au paragraphe d'introduction et au premier
chapitre, puis place le curseur &agrave; l'endroit o&ugrave; vous
pourrez saisir le paragraphe d'introduction.</p>
<pre>
(defun insert-sgml-header ()
  "Ins&egrave;re l'ent&ecirc;te 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 (&gt; (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 "&lt;!doctype linuxdoc system&gt;\n&lt;article&gt;\n&lt;title&gt;")
          (insert titre)
          (insert "&lt;/title&gt;\n&lt;author&gt;\nAuteur : ") (insert auteur) (insert "&lt;newline&gt;\n")
          (if (&gt; (length email) 0)
              (progn
                (insert "&lt;htmlurl url=\"mailto:")
                (insert email) (insert "\" name=\"") (insert email)
                (insert "\"&gt;&lt;newline&gt;\n")))
          (if (&gt; (length home) 0)
              (progn
                (insert "&lt;htmlurl url=\"http://")
                (insert home) (insert "\" name=\"") (insert home)
                (insert "\"&gt;\n&lt;newline&gt;")))
          (if (&gt; (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 "&lt;newline&gt;\n")
                (if (&gt; (length email-traducteur) 0)
                    (progn 
                      (insert "&lt;htmlurl url=\"mailto:") 
                      (insert email-traducteur) (insert "\" name=\"") 
                      (insert email-traducteur)
                      (insert "\"&gt;&lt;newline&gt;\n")))
                (if (&gt; (length home-traducteur) 0)
                    (progn 
                      (insert "&lt;htmlurl url=\"http://") 
                      (insert home-traducteur) (insert "\" name=\"")
                      (insert home-traducteur)
                      (insert "\"&gt;&lt;newline&gt;\n")))))
          (insert "&lt;/author&gt;\n&lt;date&gt;\n")
          (insert date)
          (insert "\n&lt;/date&gt;\n\n&lt;abstract&gt;\n")
          (setq point-debut (point))
          (insert "\n&lt;/abstract&gt;\n&lt;toc&gt;\n\n&lt;sect&gt;\n&lt;p&gt;\n\n\n&lt;/sect&gt;\n\n&lt;/article&gt;\n")
          (goto-char point-debut)
          ))))
 
</pre>
</body>
</html>