<!doctype linuxdoc system>
 <article>
   <title>LinuxDoc+Emacs+Ispell-HOWTO</title>
   <author>
     Författare: Philippe MARTIN
     (<htmlurl url="mailto:feloy@wanadoo.fr" name="feloy@wanadoo.fr">) &nl;
     Engelsk översättare: S&eacute;bastien Blondeel
     (<htmlurl url="mailto:Sebastien.Blondeel@lifl.fr"
      name="Sebastien.Blondeel@lifl.fr">) &nl;
     Svensk översättare: Linus Åkerlund (<htmlurl
     url="mailto:uxm165t@tninet.se" name="uxm165t@tninet.se">)
   </author>
<date>v0.4, 27 February 1998. Svensk översättning: 10 juni 1998.
   
   <abstract> 
   Detta dokument är riktat till författare och översättare av
   Linux-HOWTOn eller andra dokument för The Linux Documentation
   Project. Det ger dem ledtrådar om hur de ska använda verktyg såsom
   Emacs och Ispell.
   </abstract>
  <toc>

  <sect>Inledning
   <sect1>Upphovsrätt
    <p>
     Copyright Philippe Martin 1998&nl;
     Du får vidaredistribuera och/eller modifiera detta dokument, så
     länge du rättar dig efter villkoren i The GNU General Public
     License, version 2 eller senare.
 
   <sect1>Tillkännagivanden
    <p>
    Ett speciellt tack går till S&eacute;bastien Blondeel, som är en
    hemsk typ, och frågade mig en massa om att konfigurera Emacs. Hans
    intelligenta frågor har gjort att jag förstår det bättre, och
    vidarebefordrar denna kunskap till dig, genom detta dokument.
 
   <sect1>Kommentarer
    <p>
    Tveka inte att tala om för mig, om det är något du tycker skulle
    kunna göra detta dokument bättre. Jag kommer tänka över din kritik
    noggrant.&nl;
    Tveka ej heller att ställa frågor, relaterade till de ämnen som
    här diskuteras, till mig. Jag besvarar dem mer än gärna, eftersom
    de hjälper mig att vidare förbättra detta dokument.
     <footnote>
     Översättarens anmärkning: Om engelskan är ful, tja, det är jag
     också! 
     </footnote>
 
   <sect1>Versioner
    <p>
    Detta dokument behandlar följande versioner:
     <itemize>
      <item>Sgml-tools version 0.99,
      <item>Emacs version 19.34,
      <item>Ispell version 3.1,
      <item>Alla Emacs-bibliotek, vilka det refereras till i detta
      dokument, distribueras med ovan nämnda version av Emacs, förutom
      <tt/iso-sgml/, vilket distribueras med XEmacs, och <tt/psgml/,
      vilket är ett fristående bibliotek.
     </itemize>
 
   <sect1>Svenska översättarens anmärkningar
    <p>
    Detta dokument är en översättning av den engelska
    versionen. Originalet är skrivet på franska, ett språk jag inte
    behärskar. Jag hoppas att jag lyckats bevara all information som
    finns med i originaldokumentet. Som vanligt är alla välkomna att
    komma med anmärkningar och kritik. Ändra gärna i SGML-filen och
    skicka de korrigerade versionerna till mig, på <htmlurl
    url="mailto:uxm165t@tninet.se" name="uxm165t@tninet.se">.
  
  <sect>Introduktion
   <sect1>SGML
    <p>
     <it>Standard Generalised Mark-up Language</it>, eller 
     <bf>SGML</bf>, är ett språk för att definiera dokument-typer.
    <p>
    Man kan t.ex. definiera dokument-typen <it>recept</it>, med en
    första del för att presentera ingredienserna, en andra del för
    att presentera hjälpmedlen, en tredje del vilken ger stegvisa
    instruktioner om hur tårtan ska bakas och en trevlig, avslutande
    bild, för att visa resultatet av allt detta.
    <p>     
    Detta kallas en <it>definition av en dokument-typ</it> (Document
    type Definition. övers.anm.). Den definierar inte hur den slutliga
    produkten kommer se ut, den definierar bara vad den kommer att
    innehålla. 
    <p>     
    För att använda samma exempel igen; jag är säker på att du, då du
    läser om min idé om ett recept, känner igen dina, eller din
    favoritkocks. De ser trots allt olika ut: mina har en bild i det
    övre vänstra hörnet av badrumsskåpet, och listan över
    ingredienser finns på bakgården, mellan swimmingpoolen och
    grillen. Dina?
    <p>     
    Tack vare standarddefinitionen, så kan man skriva ett dokument
    utan att ta hänsyn till hur det slutligen kommer se ut, för läsaren.
   </sect1>
   
   <sect1><tt>LinuxDoc</tt>s typ-definition
    <p>
    Denna typ används, som du kanske har kunnat gissa dig till, till
    att skriva dokument vilka är relaterade till Linux.
    <p>
    Sådana dokument är typiskt uppbyggda som följer: de börjar med en
    titel, följd av författarens namn, versions-numret och
    datumet. Sedan kommer sammanfattningen (så att du inte behöver
    bläddra igenom hela alltet, innan du inser att det inte alls var
    vad du var ute efter), sedan innehållsförteckningen, vilken visar
    strukturen, så att de som har bråttom kan hoppa direkt till det
    avsnitt de vill läsa. 
    <p>
    Sedan följer en lista över kapitel, avsnitt och stycken. Bland
    dessa kan man infoga delar av program, ändra typsnitt, för att
    framhäva ett ord eller en mening, infoga listor, referera till
    andra delar av dokumentet osv. 
    <p>
    För att skriva ett sådant dokument behöver du bara, vid rätt
    tidpunkt, specificera titeln, författaren, datumet och
    dokument-versionen, kapitlen och avsnitten, när en lista ska
    infogas, vilka dess element är osv. 

   </sect1>

   <sect1><tt>SGML-Tools</tt>
    <p>
    <bf>SGML-Tools</bf> omvandlar ett dokuments specifikationer till
    det slutgiltiga resultatet, i det format du önskar. Om du vill ha
    det i ditt personliga bibliotek, väljer du <it>PostScript</it>. Om
    du vill dela det med världen, genom webben, så blir det
    <it>HTML</it>. Om du inte kan hjälpa det, och måste läsa det under
    Windows, så kan du omvandla det till <it>RTF</it>, så att det kan
    läsas av vilken ordbehandlare som helst. Eller så kanske du
    använder alla tre formaten, för att anpassa det till ditt växlande
    humör. 

    SGML-Tools är tillgängligt via anonym FTP från <htmlurl
url="ftp://ftp.funet.fi/public/ftp/pub/linux/utils/text/"
name="ftp://ftp.funet.fi/public/ftp/pub/linux/utils/text/">

   </sect1>

  <sect>Ditt första dokument
    <p>
    <sect1>Från ett textdokument
     <p>
     Om du vill gör om ett textdokument till SGML, för att omvandla
     det till andra format, ska du göra på följande sätt:

     <enum>
      <item>
      Lägg till de följande raderna i början:
       <verb>
	<!doctype linuxdoc system>
         <article>
          <title>Här ska titeln vara&etago;title>
          <author>
	  författarens namn, e-post-adress osv.
	  &etago;author>
          <date>
	  version och datum
	  &etago;date>
       </verb>
       
      <item>
      Om du kort beskriver dokumentets innehåll i början, innefatta
      stycket i <tt>&lt;abstract&gt;</tt>- och
      <tt>&etago;abstract&gt;</tt>-taggarna. 
       
      <item>
      Infoga sedan <tt>&lt;toc&gt;</tt>-taggen, vilket står för
      <em>Table Of Contents</em> (innehållsförteckning. övers.anm.).

      <item>
      Ersätt, i början av varje kapitel, raden som anger nummer och
      titel för kapitlet med:
       <verb>
       <sect>Kapitlets titel
       </verb>
       och lägg till <tt>&etago;sect&gt;</tt>-taggen i slutet av
       kapitlet.&nl;

       <p>
       <bf>Observera&nbsp;:</bf> Du behöver inte ange kapitel-nummer,
       detta görs automatiskt.
       
      <item>
      Fortsätt på samma sätt med avsnitten. Du måste ta bort numren
      och "tagga" deras titlar med <tt>&lt;sect1&gt;</tt>, och avsluta
      dem med <tt>&etago;sect1&gt;</tt>.

      <item>
      Du kan även, på ett liknande sätt, ange så många som 4 nästade
      nivåer i avsnitten, genom att använda <tt>&lt;sectn&gt;</tt>- och
      <tt>&etago;sectn&gt;</tt>-taggarna, där <tt>n=</tt> 2, 3 eller
      4.

      <item>
      Lägg, i början av varje stycke, in <tt>&lt;p&gt;</tt>-taggen.

      <item>
      Om du behöver framhäva vissa delar, "tagga" dem med
       <tt>&lt;it&gt;</tt> och <tt>&etago;it&gt;</tt>
       (<it>kursiverat</it>), <tt>&lt;bf&gt;</tt> och
       <tt>&etago;bf&gt;</tt> (<bf>fetstil</bf>) eller
       <tt>&lt;tt&gt;</tt> och <tt>&etago;tt&gt;</tt>
       (<tt>skrivmaskins-stil</tt>).

       <item>
       För att infoga en lista, som den följande:

       <verb>
       Detta är en lista om fyra rader:
       
         - här är första raden
	 - sedan kommer andra raden
	 - ännu en
	 - det var det.
       </verb>

       så måste du ersätta den med:
       
       <verb>
       Detta är en lista om fyra rader:
       <itemize>
       <item>här är första raden
       <item>sedan kommer andra raden
       <item>ännu en
       <item>det var det.
       &etago;itemize>
	</verb>

      <item>
      När ett helt block är en del av ett program, eller något annat
      som måste sticka ut:

       <verb>
       <verb>
	10 REM Herre gud, vad är det här?
	20 REM Jag trodde det här hade försvunnit för länge sedan!
	30 PRINT "Jag är tillbaks för att";
	40 PRINT "rädda världen."
	50 INPUT "Från vem, menar du? ",M$
	60 IF M$="Bill" THEN PRINT "Du är vis.":GOTO PARADISET
	70 ELSE PRINT "Du har inte hajat något...":GOTO RIKMOND
       &etago;verb>
       </verb>

       <item>
       På detta stadium är dina kunskaper i SGML-formattering ganska
       hyffsade. Om du vill förfina ditt dokument, så kan du ta en
       titt på användar-manualen till <bf>SGML-Tools</bf>, vilken ger
       mer detaljer om dokument-typen <bf>LinuxDoc</bf>.

     </enum>
   </sect1>
  </sect>

  <sect>Konfigurera <tt>Emacs</tt>
    <p>
    <sect1>Tecken med accent
     <p>
     Om du vill skriva dokument på franska, eller något annat
     västeuropeiskt språk, så behöver du 8-bitars tecken. Så här
     ställer du in Emacs för att acceptera sådana tecken.

     <sect2>Att visa 8-bitars tecken
      <p>
      För att få Emacs att visa 8-bitars tecken, så måste du ha
      följande rader i din <tt>.emacs</tt>-fil:
      <verb>
       (standard-display-european 1)
       (load-library "iso-syntax")
       </verb>

       Om du använder Emacs på en terminal, som har stöd för 8-bitars
       tecken, så kan du använda <tt>iso-ascii</tt>-biblioteket
       (<tt>(load-library "iso-ascii")</tt>), vilket säger åt Emacs
       att visa sådana tecken, så bra den kan.

      <sect2>Att skriva 8-bitars tecken
      <p>
      Om ditt tangentbord låter dig skriva tecken med accenter, så är
      det inget problem. Om inte, så kommer här några hjälpmedel:

      <sect3><tt>iso-acc</tt>-biblioteket
      <p>
      Emacs <tt>iso-acc</tt>-bibliotek låter dig skriva 8-bitars
      tecken på ett 7-bitars tangentbord.
    <p>
    För att använda det, infoga följande i din <tt>.emacs</tt>-fil:
      <verb>
      (load-library "iso-acc")
      </verb>
    <p>
    När du sedan kör Emacs och öppnar en fil att editera, skriv
    <tt>Meta-x iso-accents-mode</tt>.
    <p>
    Du kan skriva <bf>&eacute;</bf>-tecknet, i det svenska ordet
    <em>kaf&eacute;</em>, genom att skriva <bf>'</bf> och sedan
    <tt>e</tt>. Mer generellt så kommer du skriva ett tecken med
    accent genom att först skriva accenten, och sedan bokstaven som
    accenten ska finnas till (stora eller små bokstäver). De följande
    är accenter du kan vilja använda:

      <list>
      <item><tt>'</tt>~: Höger-lutad (akut) accent
      <item><tt>`</tt>~: Vänster-lutad (grav) accent
      <item><tt>^</tt>~: Cirkumflex
      <item><tt>"</tt>~: Punkter
      <item><tt>&tilde;</tt>~: Tilde och andra specialfall (cf iso-acc.el).
      <item><tt>/</tt>~: För att få ett streck över ordet
      </list>      
      
      Om du behöver något av dessa tecken, och inte en bokstav med
      accent, tryck mellanslag efter tecknet. För att skriva
      t.ex. <it>'kafé'</it>, skriv <tt>' <cparam/mellanslag/ k a f ' e
      '</tt>.

    <p>
    Du hittar alla möjliga kombinationer i <tt>iso-acc.el</tt>-filen. 

      <sect3><cparam/Meta/-tangenten
      <p>
      Vissa terminaler låter dig skriva 8-bitars tecken med
      <cparam/Meta/-tangenten (eller <cparam/Alt/). Om du
      t.ex. trycker <bf><cparam/Meta/-i</bf>, så får du
      <bf>&eacute;</bf>-tecknet. 

    <p>
    Men Emacs reserverar <cparam/Meta/-tangenten för andra ändamål,
    och jag känner inte till något bibliotek som låter dig använda det
    för tecken med accent.
    <p>
    Detta är en lösning:

      <verb>
      (global-set-key "\ei" '(lambda () (interactive) (insert ?\351)))
                         _                                      ___
      </verb>
      En sådan rad, om den infogas i din <tt>.emacs</tt>-fil, låter
      dig skriva <bf>&eacute;</bf> genom att använda
      <bf><cparam/Meta/-i</bf>. Du kan omdefiniera de kombinationer du
      behöver, genom att byta ut <bf>i</bf> mot den rätta tangenten
      och <bf>351</bf> med den rätta koden (koden finner du i
      tecken-uppsättningen ISO-8859-1).

    <p>
    <bf>Varning!</bf> Vissa lokala lägen kan omdefiniera sådana
    tangent-kombinationer. 

      <sect2>Att visa 8-bitars SGML-tecken
      <p>
      Under SGML kan du skriva tecken med accent med makron. För att
      skriva t.ex. <bf/&eacute;/-tecknet, så skriver du
      <bf/&amp;eacute;/. Rent generellt så kan de applikationer som
      behöver kunna läsa SGML redan läsa 8-bitars tecken, så dessa
      makron behövs inte. Men vissa kan inte det. Eftersom det finns
      ett sätt att lösa problemet, så vore det onödigt att inte
      använda makrona. 
    <p>
    <tt>iso-sgml</tt>-biblioteket låter dig skriva tecken med accent
    under Emacs, som alltid, men då du sparar din fil på disk, så
    omvandlas dessa 8-bitars tecken till sina motsvarigheter i SGML.
    <p>
    På grund av detta bibliotek är det alltså lätt att skriva och läsa
    dina dokument under Emacs, och du kan vara säker på att
    applikationer som inte klarar av 8-bitars tecken kommer att
    acceptera dina dokument.
    <p>
    För att använda detta bibliotek behöver du bara lägga till
    följande rader i din <tt>.emacs</tt>-fil:

      <verb>
      (setq sgml-mode-hook
      '(lambda () "Defaults for SGML mode."
       (load-library "iso-sgml")))
      </verb>

   <sect1>SGML-läge
     <p>
     Då du laddar en fil med <bf>.sgml</bf>-ändelsen, så går Emacs
     automatiskt in i <bf>sgml-läge</bf> (sgml mode). Om det inte gör
     det, så kan du manuellt säga åt det att göra det genom att
     skriva <tt>Meta-x sgml-mode</tt>, eller automatiskt, genom att
     lägga till följande rader till din <tt>.emacs</tt>-fil:
 
     <verb>
      (setq auto-mode-alist
      (append '(("\.sgml$"  . sgml-mode))
                auto-mode-alist))
     </verb>

     Detta läge låter dig t.ex. välja hur du ska infoga 8-bitars
     tecken. Med <tt>Meta-x sgml-name-8bit-mode</tt> (eller
     meny-alternativet <it>SGML/Toggle 8-bit insertion</it>), kan du
     välja att skriva in 8-bitars tecken som de är, eller i SGML-form,
     alltså i formen <bf>&amp;...;</bf>.

     Det låter dig även dölja eller visa SGML-taggarna, med <tt>Meta-x
     sgml-tags-invisible</tt> (eller meny-alternativet <it>SGML/Toggle
     Tag Visibility</it>).
 
   <sect1>PSGML-läge
    <p>
    PSGML-läget (PSGML mode) är väldigt hjälpsamt, om du editerar
    SGML-dokument med Emacs.
    <p>
     <htmlurl name="psgml-linuxdoc"
      url="http://www.linux-france.com/article/psgml-linuxdoc">-dokumentationen
      förklarar hur du ska installera detta läge och använda det med
      <it>LinuxDoc</it>.

     <sect1>Diverse annat
     <p>
     <sect2>auto-fill-läge
      <p>
      I det normala läget måste du använda <cparam/Return/, då du
      kommer till slutet av raden, för att komma till nästa rad,
      annars kommer raden att ta upp hela stycket. Om du använder
      <cparam/Return/ för att komma till nästa rad, så får du ett
      stycke med ojämna kanter.
      <p>
      Om du låter vissa rader gå bortom den rimliga längden, så kommer
      du inte kunna se dem i vissa editorer.
      <p>
      <bf>auto-fill</bf>-läget automatiserar detta jobbiga arbete: då du
      går bortom en viss kolumn (den 70nde, som standard), så tas du
      automatiskt till nästa rad.
      <p>
      Så här slår du på detta läge, och anger radlängden till 80 tecken:

      <verb>
       (setq sgml-mode-hook
             '(lambda () "Defaults for SGML mode."
                 (auto-fill-mode)	
                 (setq fill-column 80)))
       </verb>

   <sect>Ispell
    <p>
    Om du vill stavningskontrollera dina dokument från Emacs, så kan du
    använda <bf>Ispell</bf>-paketet och dess Emacs-läge.
 
    <sect1>Att välja standardordlistor
     <p>
     Du kan ställa in Emacs så att det, då du laddar en fil,
     automatiskt väljer vilka ordlistor det ska använda (det kan
     använda flera). Den första, och säkerligen den viktigaste, är
     huvudordlistan, vilken distribueras med Ispell. Du kan välja
     mellan flera olika språk. Den andra är din personliga ordlista,
     där Ispell infogar ord som det inte kunde finna i
     huvudordlistan, men du sade åt det att komma ihåg. 
     <p>
     En svensk (och även en dansk) ordlista kan hämtas på 
     <htmlurl url="http://www.sslug.dk/ispell/" 
      name="http://www.sslug.dk/ispell">. 

     Om du vill använda den standardiserade franska ordlistan som
     kommer med Ispell, och om du vill använda filen
     <tt>.ispell-perso-ord</tt>, i din hemkatalog, som din personliga
     ordlista, så lägg till följande rader till din
     <tt>.emacs</tt>-fil:
 
      <verb>
       (setq sgml-mode-hook
       '(lambda () "Defaults for SGML mode."
       (setq ispell-personal-dictionary "~/.ispell-perso-ord")
       (ispell-change-dictionary "francais")
       ))
       </verb>

   <sect1>Välja speciella ordlistor för vissa filer
    <p>
    Du kan få problem om du inte stavningskontrollerar alla dokument i
    samma språk hela tiden. Om du översätter dokument, så är det
    ganska troligt att du byter språk (och ordlistor) väldigt ofta.
 
    <p>
    Jag känner inte till något Lisp-sätt att välja, antingen
    automatiskt eller med ett enkelt mus-klick, huvudordlista eller
    personliga ordlista, som ska associeras med språket du för
    tillfället använder. (Om du känner till något om detta, tala om
    det för mig!)
 
    <p>
    Det är dock möjligt att ange, på slutet av filen, vilka ordlistor
    du vill använda för den aktuella filen (och endast denna). Det
    räcker att lägga till dem som kommentarer, så att Ispell kan läsa
    dem då det kör stavningskontrollen (spell-check). 
 
    <verb>
     <!-- Local IspellDict: english -->
     <!-- Local IspellPersDict: ~/emacs/.ispell-english -->
    </verb>

    Om du redan, i din <tt/.emacs/-fil, har angivit att dina
    standard-ordlistor är de franska, så kan du lägga till dessa
    rader i slutet av varje engelsk fil.
 
    <sect1>Stavningskontrollera dina dokument
     <p>
     För att stavningskontrollera ett helt dokument, använd, varifrån som
     helst i dokumentet, <tt>Meta-x ispell-buffer</tt>-kommandot. Du
     kan även välja att bara kontrollera en viss del av dokumentet:
 
     <itemize>
      <item> Markera början av avsnittet med <tt>Ctrl-Spc</tt>
      (mark-set-command), 
      <item> Gå till slutet av avsnittet du vill kontrollera,
      <item> Skriv <tt>Meta-x ispell-region</tt>.
     </itemize>

     Sedan kör Emacs Ispell. Då det stöter på ett okänt ord visar det
     dig det aktuella ordet (vanligtvis markerat) och ber dig välja
     mellan:
 
      <itemize>
       <item><bf>mellanslag </bf>behåll ordet, endast denna gång,
       <item><bf>i </bf>behåll ordet, och infoga det i din personliga
       ordlista,
       <item><bf>a </bf>behåller ordet för denna session,
       <item><bf>A </bf>behåller ordet i denna fil, och infogar det i
       filens lokala ordlista,
       <item><bf>r </bf>låter dig rätta till ordet för hand,
       <item><bf>R </bf>låter dig rätta till alla instanser av det
       felstavade ordet,
       <item><bf>x </bf>avbryter kontrollen och placerar markören där
       den var från början,
       <item><bf>X </bf>avbryter kontrollen och lämnar markören där
       den är, vilket låter dig korrigera filen; du kan senare
       fortsätta kontrollen om du skriver <tt>Meta-x
       ispell-continue</tt>, 
       <item><bf>? </bf>ger dig hjälp.
      </itemize>
      Om ispell finner ett eller flera ord som liknar det okända
      ordet, så visar det dem i ett litet fönster, vart och ett med en
      siffra framför sig. Tryck bara på motsvarande siffertangent,
      för att ersätta det felstavade ordet med det korresponderande
      ordet.
 
    <sect1>Personlig ordlista kontra filens lokala ordlista
      <p>
      <bf>i</bf>-tangenten låter dig infoga ett ord i din personliga
      ordlista, och <bf>A</bf> låter dig infoga ett ord i en lokal
      ordlista för den aktuella filen.
 
      <p>
      Den lokala filens ordlista är en sekvens av ord infogade i
      slutet av filen, som kommentarer, vilka läses in a Ispell varje
      gång det ska kontrollera filen. På det sättet kan du behålla
      vissa ord, vilka är acceptabla i denna fil, även om de inte med
      nödvändighet är acceptabla i andra filer. 
 
      <p>
      Enligt min åsikt så är det bättre att reservera den personliga
      ordlistan för ord som huvudordlistan inte känner till, men som
      tillhör språket (som sammansatta ord), plus några vanliga ord
      som substantiv och andra ord (som <it>Linux</it>), om de inte är
      alltför lika ett riktigt ord, som finns i huvudordlistan; att
      lägga till alltför många ord i den personliga ordlistan, såsom
      förnamn, kan vara farligt, eftersom de kan likna ett ord som
      ingår i språket (man skulle kunna tänka sig att Ispell blir
      förvirrat av det följande: `<it>Det roligaste med Young Ones var
      när Neil skulle koka linus-soppa.</it>'<footnote>Om jag skulle
      lagt in <em>Linus</em> i min personliga ordlista!</footnote>
 
      <sect1>Direkt stavningskontroll
      <p>
      Ispell kan utföra stavningskontroll på filen medan du
      skriver. Till detta måste du använda
      <bf>ispell-minor-mode</bf>. För ett starta eller avsluta det,
      skriv <tt>Meta-x ispell-minor-mode</tt>. Ispell <em>piper</em>
      varje gång du skriver ett ord som det inte känner igen.
 
      <p>
      Om dessa <em>pip</em> irriterar dig (eller om din rumskamrat tar
      en tupplur), så kan du ersätta de irriterande <em>pipen</em> med
      att skärmen blinkar till, vilket du gör med kommandot <tt>Meta-x
      set-variable RET visible-bell RET t RET</tt>. För att för evigt
      tysta Emacs, kan du lägga till följande rad i din
      <tt>.emacs</tt>-fil:
 
      <verb>
       (setq visible-bell t)
      </verb>

  <sect>Fula knep
   <sect1>Att automatiskt infoga ett dokumenthuvud
    <p>
    Emacs låter dig <em>hook</em>-a vissa funktioner till händelser
    (öppna en fil, spara, köra igång ett nytt läge osv).

    <p>
    <bf>autoinsert</bf>-biblioteket använder denna funktion: när du
    öppnar en ny fil under Emacs, så infogar detta bibliotek, i
    enlighet med filtypen, ett <em>standardiserat</em> dokumenthuvud.

    <p>
    I vårt fall skulle detta <em>standardiserade</em> huvud kunna vara
    den del som deklarerar dokument-typen (LinuxDoc), titeln,
    författaren och datumet.

    <p>
    Jag ska beskriva två sätt att infoga ett sådant huvud. Du skulle
    kunna infoga en förpreparerad fil, vilken innehåller denna
    information, eller så kan du köra en <bf>elisp</bf>-rutin.

   <sect2>Genom att infoga en fil
    <p>
    Först måste du säga åt Emacs att köra <tt>auto-insert</tt>-läget
    då en fil öppnas, att sedan läsa <bf>autoinsert</bf>-biblioteket,
    vilket deklarerar <tt>auto-insert-alist</tt>-listan, vilken vi
    måste ändra i. Denna lista anger huvudet som ska infogas för varje
    filtyp. Som standard måste filen som ska infogas finnas i
    <tt>~/insert/</tt>-katalogen, men det är möjligt att ändra
    <tt>auto-insert-directory</tt>-variabeln, om du vill lägga den
    någon annanstans.

    <p>
    Lägg till följande rader till din <tt>.emacs</tt>-fil, för att
    infoga filen <tt>~/emacs/sgml-insert.sgml</tt>, varje gång du
    öppnar en ny SGML-fil:

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

      Sedan kan du skriva in ditt specialkomponerade huvud i filen
      <tt>~/emacs/sgml-insert.sgml</tt>, starta om Emacs och öppna
      t.ex. <tt>foobar.sgml</tt>-filen. Emacs ska då be dig bekräfta
      att filen ska infogas automatiskt, och om du svarar ja så ska
      filen infogas. 

   <sect2>Genom att köra en rutin
    <p>
    Detta fungerar som förut, men istället för att sätta
    <tt>auto-insert-alist</tt> till en fil att infoga, så måste du
    sätta den till en funktion att köra. Så här ska du göra, om du
    vill skriva denna funktion i en fil som heter
    <tt>~/emacs/sgml-header.el</tt> (det finns ingen anledning att
    betunga din <tt>.emacs</tt>-fil med en sådan funktion, eftersom
    den kan bli ganska lång):

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

      I <ref id="insert-sgml-header" name="appendixet"> hittar du ett
      exempel på en <tt>insert-sgml-header</tt>-funktion.
     
  <appendix>

  <sect>En <tt>insert-sgml-header</tt>-funktion <label
  id="insert-sgml-header"> 
   <p>
   Denna funktion låter användaren infoga ett specialkomponerat
   dokumenthuvud i ett Linux Documentation Project-dokument. Den kan
   anropas automatiskt när en fil öppnas, eller explicit, av
   användaren.

   <p>
   Denna funktion frågar användaren, genom <em>mini-bufferten</em>, om
   en del information, av vilken en del är nödvändig, och annat ej.

   Först kommer titeln. Om ingen anges, så avslutas funktionen
   omedelbart, och infogar inget. Sedan kommer datumet, författaren,
   hans e-postadress och hemsida (de två sista är valfria). 

   Sedan kommer en fråga efter namnet på översättaren. Om det inte
   finns någon, tryck bara <em>Return</em> och inga fler frågor om en
   hypotetisk översättare kommer ställas. Om det finns en, så
   tillfrågas du om hans e-postadress och hemsida (också valfria). 

   Funktionen skriver sedan in detta i den aktuella buffern, inklusive
   informationen du skrev in i en mall, och inklusive taggarna, som
   används till sammanfattning och första kapitlet. Slutligen placeras
   markören där sammanfattningen ska skrivas. 

    <verb>
(defun insert-sgml-header ()
  "Infoga dokumenthuvudet för ett LinuxDoc-dokument"
  (interactive)
  (let (titel forfattare epost hem oversattare epost-oversattare hem-oversattare datum 
	      starting-point)
    (setq titel (read-from-minibuffer "Titel: "))
    (if (> (length titel) 0)
	(progn 
	  (setq datum (read-from-minibuffer "Datum: ")
		forfattare (read-from-minibuffer "Författare: ")
		epost (read-from-minibuffer "Författarens e-post: ")
		hem (read-from-minibuffer "Författarens hemsida: http://")
		oversattare (read-from-minibuffer "Översättare: "))
	  (insert "<!doctype linuxdoc system>\n<article>\n<titel>")
	  (insert titel)
	  (insert "&etago;titel>\n<forfattare>\nFörfattare: ") (insert forfattare) (insert "&nl;\n")
	  (if (> (length epost) 0)
	      (progn
		(insert "<htmlurl url=\"mailto:")
		(insert epost) (insert "\" name=\"") (insert epost)
		(insert "\">&nl;\n")))
	  (if (> (length hem) 0)
	      (progn
		(insert "<htmlurl url=\"http://")
		(insert hem) (insert "\" name=\"") (insert hem)
		(insert "\">\n&nl;")))
	  (if (> (length oversattare) 0)
	      (progn
		(setq epost-oversattare (read-from-minibuffer "Översättarens e-post: ")
		      hem-oversattare (read-from-minibuffer "Översättarens hemsida: http://"))
		(insert "Översättare : ") 
		(insert oversattare) 
		(insert "&nl;\n")
		(if (> (length epost-oversattare) 0)
		    (progn 
		      (insert "<htmlurl url=\"mailto:") 
		      (insert epost-oversattare) (insert "\" name=\"") 
		      (insert epost-oversattare)
		      (insert "\">&nl;\n")))
		(if (> (length hem-oversattare) 0)
		    (progn 
		      (insert "<htmlurl url=\"http://") 
		      (insert hem-oversattare) (insert "\" name=\"")
		      (insert hem-oversattare)
		      (insert "\">&nl;\n")))))
	  (insert "&etago;forfattare>\n<datum>\n")
	  (insert datum)
	  (insert "\n&etago;datum>\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>
 </article>

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