LinuxDoc+Emacs+Ispell-HOWTO Auteur: Philippe MARTIN () &nl; Vertaler: Sébastien Blondeel () Vertaler (nl): Ellen Bokhorst () v0.4, 27 Februari 1998 Dit document is bedoeld voor schrijvers en vertalers van Linux HOWTO's of enig ander document voor het Linux Documentatie Project. Het geeft aanwijzingen voor het gebruiken van hulpmiddelen waaronder Emacs en Ispell. Inleiding Copyright

Copyright Philippe Martin 1998&nl; Je mag dit document herdistribueren en/of wijzigen zolang als je voldoet aan de voorwaarden van de GNU General Public Licence, versie 2 of later.

Verdiensten

Speciale dank gaat uit naar Sébastien Blondeel, een akelige vent die me nogal veel vroeg over het instellen van Emacs. Zijn slimme vragen lieten me het beter begrijpen en de kennis via dit document aan je door te geven.

Commentaar

Aarzel niet me te vertellen waarvan je denkt dat het kan helpen dit document te verbeteren. Ik zal je kritiek door en door bestuderen.&nl; Aarzel ook niet om me vragen te stellen die te maken hebben met de onderwerpen die hier worden besproken. Ik zal ze met plezier beantwoorden, aangezien ze me kunnen helpen dit document verder te verbeteren. Opmerking van de vertaler: als de vertaling niet deugt, dan gaat dat naar mij!

Versies

Dit document gaat uit van de volgende versies: Sgml-tools versie 0.99, Emacs versie 19.34, Ispell versie 3.1, Alle Emacs libraries waarnaar in dit document wordt verwezen, worden met de bovengenoemde versie van Emacs gedistribueerd, afgezien van

Introductie SGML

Standard Generalised Mark-up Language, of SGML, is een taal voor het definiéren van documenttypen.

Men kan het documenttype bijvoorbeeld definiëren als een recept, met een eerste deel dat de ingrediënten presenteert, een tweede deel dat de accesoires introduceert, een derde deel waarin stap-voor-stap instructies worden gegeven voor het bakken van de cake, en een aardig laatste plaatje om de uitkomst van dit alles te tonen.

Dit wordt een Document Type Definition genoemd. Het definieert niet hoe het uiteindelijke product er uit zal zien, het definieert slechts wat er in zou kunnen staan.

Om nogmaals hetzelfde voorbeeld aan te halen, ik ben er zeker van dat bij het lezen van mijn idee van een recept, je jouw favoriete bereidingen herkent. Niettemin zien ze er in feite anders uit: van de mijne is er een plaatje in de bovenste linkerhoek van de badkamerkast, en de lijst met ingrediënten bevindt zich in de achtertuin, tussen het zwembad en de barbecue. En de jouwe?

Met dank aan deze standaarddefinitie; men kan een document schrijven zonder acht te slaan op hoe het er uiteindelijk richting de gebruiker uit komt te zien.

De LinuxDoc Type Definitie

Dit type wordt gebruikt, zoals je misschien al hebt geraden, om documenten gerelateerd aan Linux, te schrijven.

Dergelijke documenten worden in het algemeen als volgt opgebouwd: ze beginnen met een titel gevolgd door de naam van de auteur, en het versienummer en de -datum. Vervolgens komt de samenvatting (zodat je er niet doorheen hoeft te bladeren, voordat je je achteraf realiseert dat het niet hetgeen is waarnaar je zocht), en dan de inhoud die de structuur toont, zodat degene die haast hebben, direct naar dat deel kunnen gaan wat ze willen lezen.

Vervolgens komt er een lijst met hoofdstukken, secties en paragrafen. Hiertussen kan men stukken programma invoegen, het font wijzigen om een woord of een zin te benadrukken, lijsten invoegen, naar een ander deel van het document verwijzen, enz.

Om een dergelijk document te schrijven, zul je gewoon op het juiste moment de titel, de auteur, de datum en de versie van het document, de hoofdstukken en paragrafen moeten schrijven en laten we zeggen, welke elementen er in een lijst staan als deze moeten worden ingevoegd, enz.

SGML-Tools

SGML-Tools zal de specificatie van een document in het uiteindelijke resultaat omzetten in de vorm waaraan je de voorkeur geeft. Als je wilt dat het een onderdeel van je persoonlijke bibliotheek vormt, zul je voor PostScript kiezen. Als je het wilt delen met de rest van de wereld via het Web, zal het HTML zijn. Als je er niets aan kunt doen en het onder Windows moet lezen, kun je het omzetten in RTF zodat je het in iedere tekstverwerker in kunt lezen. Of misschien wil je alle drie de formaten gebruiken om aan je wisselende stemmingen tegemoet te komen. SGML-Tools zijn beschikbaar via anonieme FTP op

Je eerste document Vanuit een tekstdocument

Als je een tekstdocument in SGML wilt omzetten om het over te zetten naar andere formaten, is dit de manier waarop je 't doet: Voeg de volgende regels aan het begin toe:

De titel staat hier&etago;title> <author> naam van de auteur, e-mail van de auteur, enz. &etago;author> <date> versie en datum <&etago;date> </verb> </item> <item> Als je aan het begin van het document de inhoud ervan in het kort beschrijft, omsluit die paragraaf dan met de <tt><abstract></tt> en <tt>&etago;abstract></tt> tags. </item> <item> Voeg dan de <tt><toc></tt> tag in, wat staat voor <em>Inhoudsopgave</em>. </item> <item> Aan het begin van ieder nieuw hoofdstuk, vervang je de regel waarin het nummer en de titel van het hoofdstuk staan door: <verb> <sect><heading>De Titel Van Het Hoofdstuk</heading> </verb> en voeg de <tt>&etago;sect></tt> tag aan het einde van het hoofdstuk toe.&nl; <bf>Opmerking:</bf> Je hoeft het hoofdstuknummer niet aan te geven, dit gebeurt automatisch. </item> <item> Ga op dezelfde wijze door met paragrafen. Je zult de nummers moeten verwijderen en de titels laten beginnen met de <tt><sect1></tt> tag en laten beëindigen met de <tt>&etago;sect1></tt> tag. </item> <item> Je kunt op vergelijkbare wijze 4 niveuas in de secties nesten, door gebruik te maken van <tt><sectn></tt> en <tt>&etago;sectn></tt> waar de <tt>n=</tt> staat voor 2, 3, of 4. </item> <item> Aan het begin van iedere paragraaf voeg je de <tt><p></tt> tag in. </item> <item> Als je een aantal delen wilt benadrukken, omsluit ze dan met de <tt><it></tt> en <tt>&etago;it></tt> (<it>cursief</it>), <tt><bf></tt> en <tt>&etago;bf></tt> (<bf>vet</bf>), of <tt><tt></tt> en <tt>&etago;tt></tt> (<tt>typewriter stijl</tt>). </item> <item> Om een op de volgende gelijkende lijst in te voegen: <verb> Dit is een lijst met vier regels: - hier komt de eerste regel - vervolgens komt de tweede regel - nog een andere - dat is het. </verb> je moet dit vervangen door: <verb> Dit is een lijst met vier regels: <itemize> <item>hier komt de eerste regel</item> <item>vervolgens komt de tweede regel</item> <item>nog een andere</item> <item>dat is het.</item> &etago;itemize> </verb> </item> <item> Als een geheel blok uit een gedeelte van een programma bestaat, of iets anders dat in 't oog moet springen: <verb> 10 REM Oh mijn God wat is dit? 20 REM Ik dacht dat dit al lang niet meer bestond! 30 PRINT "Ik ben terug bij"; 40 PRINT "red de wereld." 50 INPUT "Van wie denk je dat 't is? ",M$ 60 IF M$="Bill" THEN PRINT "Gij bent verstandig.":GOTO PARADISE 70 ELSE PRINT "Je snapt er niks van...":GOTO RICHMOND &etago;verb> </verb> </item> <item> Tot dusverre zijn je SGML-formatterings vaardigheden al tamelijk goed. Als je je document bij wilt schaven, zou je de gebruikersgids <bf>SGML-Tools</bf> eens kunnen bekijken, waarin meer details staan over het <bf>LinuxDoc</bf> documenttype. </item> </enum> </p> </sect1> </sect> <sect><heading>Configureren van Emacs</heading> <sect1><heading>Geaccentueerde Tekens</heading> <p> Als je documenten in het Frans of elke andere West-Europese taal wilt schrijven, zul je 8-bit tekens nodig hebben. Je kunt Emacs als volgt instellen dat het dergelijke tekens accepteert. </p> <sect2><heading>Het tonen van 8-bit tekens</heading> <p> Om in Emacs 8-bits tekens te kunnen tonen, zul je de volgende regels in het bestand <tt>.emacs</tt> nodig hebben: <verb> (standard-display-european 1) (load-library "iso-syntax") </verb> Als je Emacs op een terminal gebruikt die geen ondersteuning voor 8-bit geeft, kun je de <tt>iso-ascii</tt> library (<tt>(load-library "iso-ascii")</tt>) gebruiken, waarmee Emacs de opdracht krijgt om dergelijke tekens zo goed mogelijk te benaderen. </p> </sect2> <sect2><heading>Het typen van 8-bit tekens</heading> <p> Als je toetsenbord je de mogelijkheid geeft om geaccentueerde tekens in te voeren, geen probleem. Als dit niet zo is zijn hier een aantal remedies: </p> <sect3><heading>De iso-acc-library</heading> <p> De Emacs <tt>iso-acc</tt> library geeft je de mogelijkheid om 8-bits tekens vanaf een 7-bit toetsenbord in te tikken. </p> <p> Om het te kunnen gebruiken, voeg je de volgende regel toe aan het bestand <tt>.emacs</tt>: <verb> (load-library "iso-acc") </verb> </p> <p> Vervolgens, als je Emacs draait en het bestand opent dat je wilt wijzigen, tik je in: <tt>Meta-x iso-accents-mode</tt>. </p> <p> Je kunt dan de <bf>é</bf> van het Franse woord <em>café</em> invoegen door <bf>'</bf> te typen en vervolgens <tt>e</tt>. Meer in het algemeen, je zult een geaccentueerd teken intikken door als eerste het accent in te tikken en vervolgens de letter die moet worden geaccentueerd (kleine- of hoofdletter). Je kunt de volgende accenten gebruiken: <list> <item><tt>'</tt>~: Accent Aigu</item> <item><tt>`</tt>~: Accent Grave</item> <item><tt>^</tt>~: Accent Circonflexe</item> <item><tt>"</tt>~: Dubbel aanhalingsteken</item> <item><tt>˜</tt>~: Tilde, cedille, en andere speciale gevallen (cf iso-acc.el).</item> <item><tt>/</tt>~: Om tekens te scheiden, enz.</item> </list> Als je één van deze tekens nodig hebt en niet een geaccentueerde letter, typ je er een spatie achter. Om bijvoorbeeld <it>l'éléphant</it> te typen, typ je <tt>l ' <cparam/spc/ ' e l ' e ...</tt> </p> <p> Alle mogelijke combinaties zijn in het bestand <tt>iso-acc.el</tt> te vinden. </p> </sect3> <sect3><heading>De Meta-toets</heading> <p> Een aantal terminals staan je toe om 8-bits tekens in te tikken met de <Meta> (of <Alt>) toets. Als je bijvoorbeeld <bf><Meta>-i</bf> indrukt, zul je het <bf>é</bf>-teken krijgen. </p> <p> Maar Emacs heeft de <Meta>-toets voor andere doeleinden gereserveerd, en ik ken geen library die je het laat gebruiken voor geaccentueerde tekens. </p> <p> Dit is een oplossing: <tscreen> <verb> (global-set-key "\ei" '(lambda () (interactive) (insert ?\351))) _ ___ </verb> </tscreen> Als je een dergelijk regel in het bestand <tt>.emacs</tt> invoegt, kun je een <bf>é</bf> intikken door gebruik te maken van de <bf><Meta>-i</bf> toetsaanslag. Je kunt op die manier de combinaties, die je nodig hebt, herdefiniëren als je de <bf>i</bf> door de juiste toets en <bf>351</bf> door de juiste code (de code uit de ISO-8859-1 tekenset) vervangt. </p> <p> <bf>Waarschuwing!</bf> Het kan zijn dat een aantal lokale modes dergelijke toetscombinaties herdefiniëren. </p> </sect3> </sect2> <sect2><heading>Het tonen van 8-bits SGML-tekens</heading> <p> Onder SGML kun je geaccentueerde tekens met macros intikken. De <bf/é/ toets bijvoorbeeld is <bf/&eacute;/. In het algemeen kunnen de applicaties die SGML in moeten kunnen lezen, 8-bit tekens inlezen en is het dus niet nodig om deze macro's te gebruiken. Maar een aantal ervan kunnen dit mogelijk niet. Aangezien er een manier is om dit probleem op te lossen, zou het zonde zijn om het hierdoor vast te laten lopen. </p> <p> De <tt>iso-sgml</tt> library laat je zoals altijd geaccentueerde tekens onder Emacs typen, maar bij het opslaan van je bestand naar disk, zal het deze 8-bits tekens omzetten in de SGML-equivalente. </p> <p> Dankzij deze library is het daarom makkelijk om je document onder Emacs in te typen en het opnieuw in te lezen, zodat je er zeker van kunt zijn dat een niet-8-bit-clean-applicatie je document zal accepteren. </p> <p> Om deze bibliotheek te kunnen gebruiken, hoef je slechts de volgende regels aan het bestand <tt>.emacs</tt> toe te voegen: <tscreen> <verb> (setq sgml-mode-hook '(lambda () "Standaards voor SGML mode." (load-library "iso-sgml"))) </verb> </tscreen> </p> </sect2> </sect1> <sect1><heading>SGML mode</heading> <p> Bij het laden van een bestand met de <bf>.sgml</bf> extensie, schakelt Emacs automatisch over op de <bf>sgml mode</bf>. Als dit niet gebeurt, kun je dit handmatig doen door <tt>Meta-x sgml-mode</tt> in te tikken, of automatisch door de volgende regels aan het <tt>.emacs</tt> bestand toe te voegen: <verb> (setq auto-mode-alist (append '(("\.sgml$" . sgml-mode)) auto-mode-alist)) </verb> Deze mode laat je kiezen uit hoe je bijvoorbeeld 8-bit tekens in wilt voegen. Met de <tt>Meta-x sgml-name-8bit-mode</tt> (of het menu-item <it>SGML/Toggle 8-bit insertion</it>), je kunt ervoor kiezen om de 9-bit tekens in te tikken, of in SGML vorm, b.v. in de vorm <bf>&...;</bf>. Het laat je met <tt>Meta-x sgml-tags-invisible</tt> (of het menu-item <it>SGML/Toggle Tag Visibility</it>) ook de SGML-tags verbergen of tonen. </p> </sect1> <sect1><heading>PSGML mode</heading> <p> De PSGML mode kan veel bijdragen aan het wijzigen van SGML-documenten met Emacs. </p> <p> De <htmlurl name="psgml-linuxdoc" url="http://www.linux-france.com/article/psgml-linuxdoc"> documentatie geeft een uitleg over hoe je deze mode met <it>LinuxDoc</it> kunt installeren en gebruiken. </p> </sect1> <sect1><heading>Diverse</heading> <sect2><heading>auto-fill mode</heading> <p> Als je in de normale mode een paragraaf typt en aan het einde van de regel komt, moet je de <Return>-toets gebruiken om naar de volgende regel te gaan, anders komt de gehele paragraaf op één regel. Als je de <Return> gebruikt om naar de volgende regel te gaan, krijg je een paragraaf met ongelijke rechtermarges. </p> <p> Als je een aantal regels voorbij een redelijke breedte laat gaan, kun je ze met een aantal editors niet zien. </p> <p> De <bf>auto-fill</bf> mode zorgt dat deze saaie taak automatisch wordt gedaan: als je verder gaat dan een bepaalde kolom (standaard de 70e), ga je automatisch naar de volgende regel. </p> <p> Je kunt deze mode als volgt gebruiken en de breedte-instelling van je regels op 80 instellen: <tscreen> <verb> (setq sgml-mode-hook '(lambda () "Standaardwaarden voor SGML mode." (auto-fill-mode) (setq fill-column 80))) </verb> </tscreen> </p> </sect2> </sect1> </sect> <sect><heading>Ispell</heading> <p> Als je vanuit Emacs je document op spelling wilt controleren, kun je daarvoor het <bf>Ispell</bf>-package gebruiken in de Emacs mode. </p> <sect1><heading>Kiezen van je standaard-woordenboeken</heading> <p> Je kunt Emacs zo instelen, dat het bij het laden van een bestand, automatisch woordenboeken selecteert (je kunt er verscheidene gebruiken). De eerste, zeker de belangrijkste, is het hoofdwoordenboek, dat met Ispell wordt gedistribueerd. Je kunt tussen verscheidene talen kiezen. De tweede is je persoonlijke woordenboek, waarin Ispell die woorden zal zetten die het niet in het hoofdwoordenboek kon vinden maar waarvan je aangaf dat ze moesten worden `onthouden'. Als je het Franse woordenboek dat met Ispell wordt meegeleverd, wilt gebruiken als standaard-woordenboek en als je het bestand <tt>.ispell-dico-perso</tt> in je home-directory als een persoonlijk woordenboek wilt gebruiken, zet dan de volgende regels in het bestand <tt>.emacs</tt>: <tscreen> <verb> (setq sgml-mode-hook '(lambda () "Standaardwaarde voor SGML mode." (setq ispell-personal-dictionary "~/.ispell-dico-perso") (ispell-change-dictionary "francais") )) </verb> </tscreen> </p> </sect1> <sect1><heading>Selecteren van speciale woordenboeken voor bepaalde bestanden </heading> <p> Het kan een probleem zijn als je de spelling in je documenten niet altijd in dezelfde taal wilt controleren. Als je documenten vertaalt, is het zeer waarschijnlijk dat je vaak van taal (en woordenboeken) verwisselt. </p> <p> Ik weet niet hoe je op enige Lisp-wijze, ofwel automatisch of met een enkele muisklik, het hoofdwoordenboek en persoonlijke woordenboeken geassocieerd met de taal die op dat moment wordt gebruikt, kunt selecteren. (Als je dit wel weet, laat me dit dan alsjeblieft weten!) </p> <p> Het is echter mogelijk om aan het einde van het bestand aan te geven, welke woordenlijsten je voor het huidige bestand (en slechts deze) wilt gebruiken. Het volstaat om ze als commentaar toe te voegen, zodat Ispell ze bij het opstarten van de spellingscontrole kan inlezen: <verb> <!-- Local IspellDict: english --> <!-- Local IspellPersDict: ~/emacs/.ispell-english --> </verb> Als je voorheen, in het bestand <tt/.emacs/, hebt opgegeven dat je standaard-woordenboeken de Franse woordenboeken zijn, dan kun je deze regels aan het einde van ieder bestand in 't Engels toevoegen. </p> </sect1> <sect1><heading>Controleren van de spelling in je document</heading> <p> Om je gehele document op spelling te controleren, gebruik je vanuit een willekeurige plaats in het document het commando <tt>Meta-x ispell-buffer</tt>. Je kunt ook slechts de spelling van een deel van je document controleren: <itemize> <item> Markeer het begin van het gebied met <tt>Ctrl-Spc</tt> (mark-set-command), </item> <item> Ga naar het einde van het gebied dat moet worden gecontroleerd, </item> <item> typ <tt>Meta-x ispell-region</tt>. </item> </itemize> Emacs start dan vervolgens Ispell op. Zodra het een onbekend woord tegenkomt, wordt het woord getoond (meestal benadrukt) en wacht tot je één van de volgende toetsen indrukt: <itemize> <item><bf>spc </bf>accepteer alleen deze keer het woord, </item> <item><bf>i </bf>accepteer het woord en voegt het toe aan je persoonlijke woordenboek, </item> <item><bf>a </bf>accepteer het woord voor deze sessie, </item> <item><bf>A </bf>accepteer het woord voor dit bestand, en voeg het toe aan het lokale woordenboekbestand </item> <item><bf>r </bf>staat je toe om het woord handmatig te wijzigen </item> <item><bf>R </bf>staat je toe om het onjuist gespelde woord in alle voorkomende gevallen te wijzigen, </item> <item><bf>x </bf>stop het controleren en zet de cursor weer terug op z'n plaats, </item> <item><bf>X </bf>stop het controleren en laat de cursor waar het is, zodat je je bestand kunt corrigeren;je zul later weer verder kunnen gaan met het controleren van de spelling als je <tt>Meta-x ispell-continue</tt> intikt, </item> <item><bf>? </bf>geeft je online-help. </item> </itemize> Als ispell één of meerdere woorden vindt, die het onbekende woord benaderen, zal het ze in een klein venster tonen, waarbij ieder woord wordt voorafgegaan door een cijfer. Typ gewoon dit cijfer in om het onjuist gespelde woord te vervangen door het corresponderende woord. </p> </sect1> <sect1><heading>Persoonlijk woordenboek versus lokaal woordenboekbestand </heading> <p> Met de <bf>i</bf> toets kun je een woord invoegen in je persoonlijke woordenboek, en met <bf>A</bf> kun je een woord invoegen in het lokale woordenboekbestand. </p> <p> Het lokale woordenboekbestand bestaat uit een reeks woorden die aan het einde van het bestand als commentaar worden ingevoegd, en iedere keer dat Ispell met dit bestand wordt opgestart, opnieuw worden ingelezen. Op deze manier, kun je een aantal woorden accepteren, die in dit bestand, maar niet noodzakelijk in andere bestanden zijn toegestaan. </p> <p> Wat mezelf betreft, denk ik dat het beter is dat het persoonlijke woordenboek gereserveerd moet zijn voor woorden die niet in het hoofdwoordenboek staan maar die wel aan de taal toebehoren (zoals afgebroken woorden), plus een aantal algemene woorden zoals proper nouns of anderen (zoals <it>Linux</it>), alz ze niet te veel op een echt woord uit het hoofdwoordenboek lijken; het toevoegen van te veel woorden in het persoonlijke woordenboek zoals voornamen, kan risico's met zich meebrengen omdat ze op een woord uit de werkelijke taal kunnen lijken (je kunt je voorstellen dat Ispell door het volgende wordt gefopt: `<it>When the going gets tof, the tof get going</it><footnote> <em>Tof</em> is een Franse afkorting voor de voornaam <em>Christophe</em>!').</footnote> </p> </sect1> <sect1><heading>Controleren van de spelling tijdens het typen</heading> <p> Ispell kan je bestand tijdens het typen op spelling controleren. Hiervoor moet je de <bf>ispell-minor-mode</bf> gebruiken. Om het te starten of te stoppen, tik je in: <tt>Meta-x ispell-minor-mode</tt>. Ispell zal iedere keer dat je een woord intikt en het niet kent een <em>beep</em> produceren. </p> <p> Als die <em>beeps</em> je irriteren (of je kamergenoot doet een dutje), kun je die hinderlijke <em>beeps</em> vervangen door een flits op het scherm, met het commando <tt>Meta-x set-variable RET visible-bell RET t RET</tt>. Je kunt de volgende regel aan je bestand <tt>.emacs</tt> toevoegen om Emacs voorgoed tot zwijgen brengen: <verb> (setq visible-bell t) </verb> </p> </sect1> </sect> <sect><heading>Truuks</heading> <sect1><heading>Automatisch invoegen van een header</heading> <p> Emacs staat je toe om een aantal acties aan een event te <em>koppelen</em> (openen van een bestand, opslaan, opstarten van een nieuwe mode, enz). </p> <p> De <bf>autoinsert</bf> library maakt van deze faciliteit gebruik: als je een nieuw bestand onder Emacs opent, voegt deze library, overeenkomstig het type bestand, een <em>standaard</em> header in. </p> <p> In ons geval, zou deze <em>standaard</em> header evengoed het deel kunnen zijn dat het documenttype (LinuxDoc), de titel, de auteur, en de datum declareert. </p> <p> Ik zal hier twee manieren beschrijven om een dergelijke header in te voegen. Je zou een sjabloon-bestand met informatie in kunnen voegen, of je zou een <bf>elisp</bf>-routine op kunnen starten. </p> <sect2><heading>door het invoegen van een bestand</heading> <p> Je moet Emacs eerst laten weten dat het de <tt>auto-insert</tt> opstart als het een bestand opent, dan de <bf>autoinsert</bf> library in te lezen, die de <tt>auto-insert-alist</tt> lijst declareert die we moeten wijzigen. Deze lijst definieert de header voor ieder bestandstype die moet worden ingevoegd. Standaard moet het bestand dat moet worden ingevoegd in de <tt>~/insert/</tt> directory staan, maar het is mogelijk om de <tt>auto-insert-directory</tt> variabele te herdefiniëren, als je het ergens anders wilt plaatsen. </p> <p> Voeg de volgende regels toe aan je <tt>.emacs</tt> bestand om het bestand <tt>~/emacs/sgml-insert.sgml</tt> iedere keer dat je een nieuw SGML-bestand opent, in te voegen: <verb> (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)) </verb> Vervolgens kun je in het bestand <tt>~/emacs/sgml-insert.sgml</tt> je aangepaste header wegschrijven en dan Emacs opnieuw opstarten en één of ander bestand <tt>foobar.sgml</tt> openen. Emacs zou je moeten vragen om de automatische invoeging te bevestigen en als je `yes' antwoordt, je header invoegen. </p> </sect2> <sect2><heading>door het opstarten van een routine</heading> <p> Dit werkt net als voorheen, maar in plaats van de <tt>auto-insert-alist</tt> in te stellen op een bestand dat moet worden ingevoegd, zul je het in moeten stellen op een functie die moet worden uitgevoerd. Zo kunt je verdergaan, ervan uitgaande dat je deze functie wilt wegschrijven in een bestand met de naam <tt>~/emacs/sgml-header.el</tt>. (het is niet nodig je <tt>.emacs</tt> bestand met een dergelijke functie te belasten, aangezien het nogal lang kan worden): <verb> (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)) </verb> In de <ref id="insert-sgml-header" name="appendix"> zul je een voorbeeld aantreffen van de <tt>insert-sgml-header</tt> functie. </p> </sect2> </sect1> </sect> <appendix> <sect><heading>Een insert-sgml-header functie <label id="insert-sgml-header"> </heading> <p> Deze functie zal voor de gebruiker een aangepaste header, voor een Linux Documentatie Project document, in een nieuw bestand invoegen. Het kan automatisch, wanneer er een nieuw bestand wordt geopend, of expliciet door de gebruiker worden aangeroepen. </p> <p> Deze functie vraagt de gebruiker, via de <em>mini-buffer</em>, om wat informatie, een deel daarvan is nodig, een deel daarvan niet. Als eerste komt de titel. Als er geen wordt opgegeven, keert de functie onmiddellijk terug, en voegt niets in. Dan komt de datum, de auteur, zijn e-mail en home-page (deze laatste twee zijn optioneel). Dan komt een verzoek voor de naam van de vertaler. Als er geen is, typ je gewoon <em>Return</em>, en er zullen verder geen vragen meer worden gesteld over een hypothetische vertaler. Als er wel één is, wordt je om zijn e-mail en home-pagina gevraagd (ook optioneel). Deze functie drukt je verzoek vervolgens naar de huidige buffer af, natuurlijk inclusief alle informatie die je in het invoerformulier hebt ingetikt, en ook inclusief de tags die dienen voor de samenvatting en het eerste hoofdstuk. Als laatste zet het de cursor op die plaats waar de samenvatting moet worden ingetypt. <verb> (defun insert-sgml-header () "Voegt de header voor een LinuxDoc document in" (interactive) (let (title author email home translator email-translator home-translator date starting-point) (setq title (read-from-minibuffer "Titel: ")) (if (> (length title) 0) (progn (setq date (read-from-minibuffer "Datum: ") author (read-from-minibuffer "Auteur: ") email (read-from-minibuffer "Auteur e-mail: ") home (read-from-minibuffer "Auteur home-pagina: http://") translator (read-from-minibuffer "Vertaler: ")) (insert "<!doctype linuxdoc system>\n<article>\n<title>") (insert title) (insert "&etago;title>\n<author>\nAuthor: ") (insert author) (insert "&nl;\n") (if (> (length email) 0) (progn (insert "<htmlurl url=\"mailto:") (insert email) (insert "\" name=\"") (insert email) (insert "\">&nl;\n"))) (if (> (length home) 0) (progn (insert "<htmlurl url=\"http://") (insert home) (insert "\" name=\"") (insert home) (insert "\">\n&nl;"))) (if (> (length translator) 0) (progn (setq email-translator (read-from-minibuffer "Vertaler e-mail: ") home-translator (read-from-minibuffer "Vertaler home-pagina: http://")) (insert "Vertaald door : ") (insert translator) (insert "&nl;\n") (if (> (length email-translator) 0) (progn (insert "<htmlurl url=\"mailto:") (insert email-translator) (insert "\" name=\"") (insert email-translator) (insert "\">&nl;\n"))) (if (> (length home-translator) 0) (progn (insert "<htmlurl url=\"http://") (insert home-translator) (insert "\" name=\"") (insert home-translator) (insert "\">&nl;\n"))))) (insert "&etago;author>\n<date>\n") (insert date) (insert "\n&etago;date>\n\n<abstract>\n") (setq point-beginning (point)) (insert "\n&etago;abstract>\n<toc>\n\n<sect>\n<p>\n\n\n&etago;sect>\n\n&etago;article>\n") (goto-char point-beginning) )))) </verb> </p> </sect> </article> </linuxdoc> <!-- Local IspellDict: english --> <!-- Local IspellPersDict: ~/emacs/.ispell-english --> <!-- Local IspellDict: english --> <!-- Local IspellPersDict: ~/emacs/.ispell-english --> <!-- LocalWords: bastien HOWTOs rushy HTML Dieresis phant eacute sgml caf --> <!-- LocalWords: tof Christophe autoinsert elisp Blondeel spc XEmacs -->