# Användarhandledning för LysKOMs emacslispklient

# Förord

Meningen med detta dokument är att den ska beskriva allt man behöver veta om LysKOMs emacslisp-klient för att kunna använda den. Det förutsätts att läsaren känner till GNU-emacs. Om användaren har använt QZ-KOM är detta en fördel, men det är på inget vis nödvändigt för förståelsen av LysKOM.

All utveckling av LysKOMs emacslispklient, lyskom-systemet och i detta dokument nämnda andra klienter är ideelt arbete utfört av medlemmar i Lysator, datorföreningen vid Universitet och Tekniska Högskolan i Linköping.

Om du vill deltaga i arbetet så är det bra om du skaffar dig en ordentlig introduktion till hur systemet fungerar. Om du finns i Linköping så är det enklast att prata med någon av de som varit med och som är ansvariga för det som hittills är gjort. Om du inte finns i Linköping är du utelämnad åt självstudier av de få dokument som finns och källkoden. Jag skulle nog vilja rekommendera ett veckosluts intensivkurs i Linköping för att få riktigt grepp om hur det hela hänger ihop.

Det finns alternativ till LysKOMs emacslispklient som också är fritt tillgängliga. Än så länge har de inte riktigt LysKOMs emacslispklients funktionalitet utan är begränsade i något avseende men det sker utveckling av dem hela tiden.

Samtliga här beskrivna LysKOMklienter har fördelen framför LysKOMs emacslispklient att de är mindre cpu-krävande och därför snabbare.

tty-klienten
C-klienten
  tty-klienten är skriven i C med det ursprungliga målet att så troget som möjligt likna QZ-kom. Avvikelser från detta målet har skett dels beroende på de olika förutsättningar som LysKOM har jämför med QZ-kom och dels beroende på personlig smak hos utvecklarna. När detta skrivs är tty-klienten (version L0.11) ganska stabil, den går lätt att kompilera och köra på flera olika system (1) förusatt att man har GCC installerad.

  Den senaste versionen av tty-klienten finns att hämta via ftp från ``ftp.lysator.liu.se'` i underbiblioteket ``/pub/lyskom/tty-client/'`

  Den som gjort mest i tty-klienten är Thomas Bellman `<bellman@lysator.liu.se>`.

  Den som för närvarande gör något och som är ansvarig för de senaste versionerna är Linus Tolke `<linus@lysator.liu.se>`.

tkom
nilkom
kom++
  tkom och nilkom är två olika klienter som bygger på samma grundstomme. Grundprogrammet som pratar med lyskom-servern är skrivet i C++ och sedan finns det två olika användargränssnitt som är skrivna i TCL. Nilkom kör mot en terminal medan tkom öppnar X-fönster.

  Målet med denna klient är att erbjuda ett gränssnitt till lyskom-servern som är bättre än protokollet och det finns redan nu rutiner för cache av personer och möten.

  tkom, nilkom, kom++-paketet kräver att C++ och TCL/Tk finns installerat på maskinen men om man vill använda paketet för att bygga en helt egen klient kan man klara sig utan TCL.

  Den senaste versionen av kom++-klienten finns att hämta via anonym ftp från ``ftp.lysator.liu.se'` i underbiblioteket ``/pub/lyskom'`.

  De som för närvarande jobbar med kom++-klienten är Per Cederqvist `<ceder@lysator.liu.se>` och Inge Wallin `<ingwa@isy.liu.se>` eller `<inge@lysator.liu.se>`.

# Historia

LysKOM är ett konferenssystem som är inspirerat av KOM, det konferenssystem som skapades av QZ i Stockholm. Orsaken till att LysKOM skrevs var att det KOMsystem Lysators medlemmar hade tillgång till lades ner. QZ-KOM gick att köra på DEC-10 och DEC-20-maskiner och den sista DEC-20-maskinen på LiTH som studenterna hade tillgång till såldes och försvann. KOM hade blivit vanebildande för en del och det bedömdes att en ersättning var nödvändig.

En tidig tanke när vi började jobba med LysKOM var att det skulle gå att ha flera olika användargränssnitt samtidigt. Någon vill se en grafisk struktur på hur inläggen hänger ihop på sin grafiska skärm, någon annan vill kunna fortsätta att använda sin gamla vt100. Det var också klart att systemet skulle köra under UNIX eftersom detta operativsystem bedömdes som vanligt i framtiden. Lysators medlemmar hade dessutom stor erfarenhet av UNIX och Lysator äger ett antal UNIX- maskiner.

Bland annat av dessa orsaker valde vi att använda en server-klientmodell. En central server tar hand om alla inlägg och LysKOM:s hela databas. Mot denna server kan flera stycken klienter koppla upp sig via TCP/IP.

När servern började fungera behövdes det en enkel klient för att kunna testa. Per Cederqvist skrev en enkel klient i emacslisp som sedan byggts på av ett antal lysatormedlemmar. Även personer utanför Lysator har bidragit till utvecklingen med färdiga funktioner och framför allt kommentarer och idéer. Det är detta som idag är LysKOMs emacslispklient.

# Servern

Servern, databashanteraren, är skriven i C och körs på ``varg.lysator.liu.se'` (IP-nummer 130.236.254.151). Databasfilen är läsbar för flera av lysators medlemmar, vilket kan tyckas vara en bugg, men den är medveten. Vi vill inte ge någon en falsk känsla av säkerhet och på ett system sådant som Lysators är det alltför många som har privilegier för att man skall kunna garantera någon hemlighet. På andra serverinstallationer i framtiden blir naturligtvis situationen en annan.

# Uppstart

## Från Lysators maskiner

Enklast är att köra LysKOM från någon av Lysators UNIX-maskiner. När man har startat emacs räcker det med att skriva:

    M-x lyskom RET

för att sätta igång. Svara på frågan om server med att trycka `RET`.

## Från elev-sparcarna på IDA (Inst. för Datavetenskap på LiTH):

Lägg in

    (autoload 'lyskom "~d88perce/lyskom" "Köra LysKOM" t)

i din ``.emacs'`. Starta om emacs eller läs in ``.emacs'` i din emacs igen. Skriv `M-x lyskom` `RET`. När du får frågan om server svarar du `diag19` och hoppas att allt fungerar. Kör inte från IDA:s maskiner om de är nerlastade - vi vill inte att någon ska få för sig att stänga denna möjlighet att köra LysKOM. På ``diag19.ida.liu.se'` ligger ett litet program som reläar anropen vidare till ``varg.lysator.liu.se'` där servern ligger.

## Från andra maskiner

Om du vill hämta LysKOMs emacslispklient från någonstans utanför LiTH kan du hämta den senaste versionen via anonym ftp från ``ftp.lysator.liu.se (130.236.254.153)'`. Ange din emailadress som lösenord. Gå ner i directoryt ``pub/lyskom/elisp-client'` och skriv code{get lyskom-X.el.gz} där `X` är det högsta nummer du kan hitta i det directoryt. Filen med det högsta numret är alltid den senaste versionen. När överföringen är klar, bryt förbindelsen genom att skriva `quit`.

Du installerar LysKOMs emacslispklient genom att flytta den hämtade filen till det lokala emacslispbiblioteket ``site-lisp'` under namnet ``lyskom.el'` och lägga in en rad

    (autoload 'lyskom "lyskom" "Köra LysKOM" t)

i filen defaults.el i samma directory.

Om du bara skall installera klienten för dig själv, ett måste om du inte får lov att installera emacslispprogram på systemet så flyttar du istället filen med namnet ``lyskom.el'` till ditt egna emacslispbibliotek och stoppar in raden ovan i din ``.emacs'`-fil.

Det kan löna sig att byte-kompilera klienten. See Info file `emacs', node `Lispbibliotek för emacs'.

Denna dokumentation finner du på samma ställe under namnet ``elisp-client.info-X.tar.gz'` för den infoiserade versionen och ``elisp-client.txt-X.gz'` för den enkla text-versionen. Detta dokument är ett texinfodokument och om du planerar att skriva ut det på skrivar så kontakta utvecklarna så kan de generera en ``.dvi'`-fil eller en postscript-fil.

Om Emacs säger `"Unknown host"` när du skrivit `M-x lyskom RET` och angivit `kom.lysator.liu.se` som svar på frågan om vilken server du vill koppla upp dig mot så beror det på att nameservern på din maskin inte fungerar som den skall. Du måste du be din systemadministratör att fixa den.

Om du har en gammal version av emacs kan det hända att den inte använder nameservern för att slå upp namnet och då fixar man det genom att lägga in

    130.236.254.151 kom.lysator.liu.se

i host-tabellen (2).

I emacs version 19 är en alternativ lösning att ange numret till maskinen som LysKOMservern kör på (``130.236.254.151'`).

# Första gången du kör LysKOM

När du har svarat på frågan om server och uppkopplingen mellan klient och server är klar så får du en ny fråga; ditt namn. Det är sed att ange både för och efternamn samt den organisation du arbetar för, t ex

    Inge Wallin, ISY

Om du inte är från Linköping (3) kan det också vara bra att på något sätt ange vilken stad du normalt finns i, t.ex

    Salvador Dalberg, Stacken, Stockholm

Om det inte fanns någon med det namn du angav så får du bekräfta att du har stavat ditt namn rätt. Därefter får du uppge ett personligt lösenord.

Du blir medlem i mötet ``Presentation (av nya) möten'` automatiskt när du går in i LysKOM första gången. I det mötet hamnar beskrivningar av nya möten när de skapas och när beskrivningen ändras. Det kan vara bra att i lugn och ro läsa igenom detta möte och efterhand gå med i de möten som du finner intressanta.

För att titta på presentationen för ett möte igen kan man använda kommandot `Återse presentation`.

# Möten

Debatten är uppdelad i olika möten. Möten är dataenheter som bl.a. har namn, medlemmar och mottagna inlägg. Medlemmarna förväntas vara intresserade av inläggen som skickas till just det mötet och läser dem. Namnen används som en kort presentation av mötet när man skall referera till det, dvs när man går till mötet eller skickar brev till mötet.

Möten har också presentationer som lite mer utförligt beskriver vad mötet är tänkt att handla om.

Det finns inga som helst mekanismer eller garantier för att kolla att medlemmarna i ett möte, och andra också för den delen, skickar inläggen till rätt möte. Det finns möjligheter för administratören av mötet eller författaren av inlägget att flytta inlägget om det hamnat fel men oftast är det författarens ansvar att se till att det hamnar rätt från början.

# Köra LysKOM

## Prompten

När LysKOM är klart att ta emot ett kommando skrivs en prompt ut. Den kan se ut på t.ex följande sätt:

    Gå till nästa möte -
    Läsa nästa text -
    Se tiden -

När du ser prompten kan du ge ett kommando. Var snäll mot klienten! Tryck inte på en massa knappar innan du ser prompten! Det blir bara problem om du gör det! Speciellt känslig är den i inloggningsfasen. Kom ihåg att LysKOMs emacslispklient från början var avsedd bara som ett surrogat för den egentliga klienten och att det som du nu kör är en alfarelease.

## Scrollning

Om inte allt ryms på skärmsidan så syns en procentsats i mode-raden. Tryck på mellanslag när du läst klart så scrollas nästa sida fram.

## Kommandon

Det finns två slags kommandon, dels de som är bundna till enskilda tangenter, dels de som du måste ange i klartext. Många kommandon kan anges på båda sätten. För att ange ett kommando med dess fulla namn trycker du tangenten `a`, vilket skall uttydas `(Något) Annat`, ett kommando som fanns i gamla QZ-KOM. Detta ger dig en fråga på emacs meddelanderad och du kan nu trycka `?` och få en lista på vilka kommandon som finns.

Antalet kommandon ökar hela tiden med ökande versionsnummer. Följande kommandon finns i LysKOMs emacslispklient i den version som anges i titeln på detta dokument. Först visas vilken tangent som funktionen ligger på och därefter vad man anger under `a`. I mötet ``LysKOM Elispklient; diskussion och ideer'` på Lysators LysKOM-system diskuteras nyheter om klienten. När en ny version släpps annonseras det också i det mötet, för det mesta tillsammans med en lista på de ändringar som är gjorda sen förra versionen.

### Kommandon för att läsa inlägg.

`SPC`
(mellanslag)
`RET`
  Utför defaulthandlingen, dvs det som står i prompten.

`LFD`
(eller `NEWLINE`)
  Samma som mellanslag eller `RET`, men placera först markören överst på skärmen.

`ni`
`Läsa nästa inlägg`
  Gå till nästa inlägg och visa den. Om du håller på att återse sparas informationen om vad du återser undan. Med `ån` kan du sedan återse nästa inlägg.

`nm`
`Gå till nästa möte`
  Går till nästa möte med olästa inlägg. Alla olästa i det nuvarande mötet sparas och mötet placeras sist i listan över möten med olästa inlägg.

`h`
`Hoppa över alla kommentarer`
  Hoppa över alla kommentarer till det senast lästa inlägget, dvs markera dem som lästa utan att visa dem. Detta sker rekursivt så att alla kommentarer till kommentarerna också markeras som lästa, osv. För att undvika att detta kommando jobbar för evigt läsmarkerar och söker klienten bara rekursivt vidare om kommentaren i varje steg är nyare än det kommenterade inlägget.

`e`
`Endast läsa senaste`
  Man får ange ett antal inlägg som man vill läsa i det nuvarande mötet. Alla andra inlägg i mötet markeras såsom lästa.

`Uppskjuta läsning`
  Man får ange hur många inlägg i mötet man vill läsa nu. Klienten kommer att "glömma bort" att du borde få läsa alla utom de sista N inläggen i det möte du befinner dig i. Nästa gång du startar klienten kommer du att få läsa de "bortglömda" inläggen. De glöms bara tillfälligt.

`M-p`
`(Spring till) början av texten`
  Detta kommando är bara till för att snabbare kunna hitta början på det inlägg man är vid, eller hitta föregående inlägg.

`M-n`
`(Spring till) nästa text`
  Detta kommando är motsatsen till `M-p`. Det springer till nästa inlägg istället.

`DEL`
`Scrolla ner`
  Detta kommando rullar tillbaka skärmen så att man kan se det som skrevs innan. För att komma framåt igen är det bara att trycka `SPC`.

### Få hjälp

Du kan alltid få hjälp.

`?`
`Hjälp`
  Beskriv LysKOM-moden och alla dess tangentbordsbindningar. Om du redan gett en del av ett kommando och trycker `?` så får du en lista på vilka alternativa kommandon som finns från det läget. Alternativlistan innehåller vad du skulle tryckt för att välja just det alternativet samt kommandots namn.

### Skriva

Här är samtliga kommandon som används för att skriva ett inlägg listade.

`b`
`Skicka brev`
  Skicka ett brev till en person eller ett möte. Programmet frågar efter vilket möte/person som man vill skicka brevet till. Man kan skicka brev även till slutna möten. Om personen eller mötet har en lapp på dörren så visas lappen i LysKOM-bufferten.

`i`
`Skriva ett inlägg`
  Skriv ett inlägg i det möte där du befinner dig för tillfället. Se avsnittet nedan som beskriver vad du kan göra medan du skriver.

`k`
`Kommentera inlägget`
  Kommentera det senast lästa eller skrivna inlägget. Man kan också kommentera ett valfritt inlägg genom att istället för att trycka `k` trycka inläggsnummret för det inlägg man vill kommentera följt av `k`. Alternativ till detta är att trycka `C-u k` varpå man får ange inläggsnumret.

  Om inlägget skulle ha flera mottagare så får man, för var och en av dessa mottagare en kontrollfråga om man vill att den skall vara kvar som mottagare eller inte. Detta går givetvis att stänga av.

`K`
`Kommentera föregående inlägg`
  Kommentera det näst senast lästa eller skrivna inlägget. Det kan vara bra om man gör `åk` (`Återse det kommenterade`) innan man bestämmer sig för att kommentera.

`F`
`Fotnot till inlägg`
  Skriv en fotnot till det senast lästa inlägget. Kommandot fungerar som kommandot `Kommentera inlägget`. Observera att om man inte explicit anger inläggsnummer skriver man alltid fotnoter till senast lästa inlägg. Detta innebär att man "tvingas" återse sitt senast skrivna inlägg innan man kan skriva en fotnot till det.

`p`
`Personligt svar`
  Skriv ett personligt svar till författaren av det senast lästa inlägget. Detta är detsamma som att skicka ett brev till honom som är en kommentar till inlägget.

  Man kan liksom när man skriver kommentarer skriva personligt svar till godtyckligt inlägg genom att antingen skriva inläggsnummer `p` eller `C-u p` följt av inläggsnumret och `RET`.

`P`
`Personligt svar på föregående inlägg`
  Skriv ett personligt svar till författaren av det näst senast lästa inlägget. Jämför kommentera föregående inlägg.

### Lista

Du kan lista olika saker med dessa olika kommandona.

`v`
`Vilka är inloggade`
  Visa en lista över de personer som är inloggade i LysKOM för ögonblicket. Man får dessutom reda på vilken maskin de kör ifrån samt vad de sysslar med just nu. Inloggningarna visas i sessionsnummerordning och den egna inloggningen markeras med en asterisk precis efter sessionsnumret.

`lm`
`Lista möten`
  Lista alla möten som matchar ett givet mönster. LysKOM frågar efter mönstret innan sökningen startar. En asterisk (`*`) skrivs ut framför namnet på alla möten som man inte är medlem i.

`ln`
`Lista nyheter`
  Lista alla nyheter, dvs alla möten i vilka du har olästa inlägg. Talar också om hur många olästa du har i resp. möte.

`lN`
  Samma som `ln`, men använder en något långsammare metod. Detta anrop finns endast med som kontroll eftersom metoden som används för `ln` visserligen är snabbare, men också mycket mer komplicerad. Detta kommando kommer att försvinna snart(?).

`lp`
`Lista personer`
  Lista alla personer som matchar ett givet mönster. LysKOM frågar efter mönstret innan sökningen startar.

`ls`
`Lista medlemsskap`
  Listar vilka möten du är medlem i, vilka prioriteter som gäller för mötena samt hur många olästa du har i varje möte.

`lä`
`Lista ärenden`
  Listar ärenden och författare på de inlägg som du har olästa i mötet, eller på dina markerade inlägg, när du har prompten `Återse nästa markerade -`.

### Bli medlem

Här beskriver vi hur du kan bli medlem i ett möte, samt hur du gör för att utträda.

`g`
`Gå till möte`
  Gå till ett nytt möte för att börja läsa inlägg där. LysKOM frågar efter vilket möte du vill gå till.

  Om du inte är medlem i mötet så frågar LysKOM om du vill bli medlem i mötet och om man då svarar `j` så blir man medlem i mötet på samma sätt som om man hade gjort `m` (`Bli medlem i möte`). Efter det så går man till mötet på vanligt sätt.

`m`
`Bli medlem i möte`
  Frågar efter ett möte och ser till att du blir medlem i det. I samband med detta får du ange en prioritet för mötet och var mötet skall läsas i förhållande till andra möten med samma prioritet. LysKOM kommer att sätta prioriteten till `100` om du inte har ändrat variabeln `kom-membership-default-priority` som kontrollerar detta.

  För att LysKOM skall veta i vilken ordning du vill läsa dina möten måste du ange det för varje möte du går med i. Du kan (givetvis) sätta en variabel som kontrollerar detta också, nämligen `kom-membership-default-placement`, men om du inte anger något så måste du ange det. LysKOM frågar var du vill lägga det. 0 är allra först (före din brevlåda) och det högsta numret som finns som alternativ är sist i listan.

  Om mötet är slutet så kan man inte gå med i det. Detta kommando kan även användas för att ändra prioritet för ett möte som du redan är medlem i.

`Utträda ur`
  Frågar efter namnet på ett möte och gör så att du utträder ur mötet. Alla markeringar om eventuella lästa inlägg försvinner. Detta kommando har inte någon egen tangent.

### Sluta

`S`
`q`
`Sluta`
  Avslutar LysKOM. Det går lika bra att sluta genom att gå ur Emacs eller ta bort LysKOM-bufferten.

  Om du har inlägg som du börjat skriva på och sedan varken slängt eller skickat in till LysKOM-servern så kommer du att få en extra kontrollfråga om du verkligen vill sluta trots att du har oinskickade inlägg.

  Om du väljer att gå ur lyskom genom att avsluta Emacs och har oinskickade buffertar kommer LysKOMs emacslispklient att se till att Emacs betraktar LysKOM som en viktig process. Om du däremot har skickat in eller slängt alla dina inlägg ser LysKOMs emacslispklientent till att Emacs inte betraktar LysKOM som en viktig process. Om du får en kontrollfråga: "Active processes exist; kill them and exit anyway? (yes or no)" innebär det alltså att du har oinskickade inlägg. (4)

### övriga kommandon i LysKOM.

`M-x kom-recover`
`Återstarta kom`
  Nollställer diverse interna strukturer i klienten. Används då klienten har hängt sig eller då klienten och servern har kommit ur fas. Det kan de göra om man trycker `C-g` @kindex C-g vid olämpliga tillfällen.

  Om klienten hänger sig på detta vis beror det egentligen på att det är en bugg i klienten. Se till att skapa en buggrapport innan du ger det här kommandot. Se även section Buggrapporter.

`t`
`Se tiden`
  Visar vad klockan är.

`fu`
`Få uppmuntran`
  Ger den dystre användaren lite ljus i mörkret.

`fs`
`Få skäll`
  Tar ner den uppblåste användaren på jorden.

`V`
`Vänta på ett inlägg`
  Stoppar LysKOM och väntar på att ett inlägg med prioritet högre än nästa möte man kommer till skall skrivas. Vill man bryta av innan är det bara att ge ett kommando.

  Om du inte vill att inlägg med låg prioritet, men högre än nästa möte, ska avbryta väntafunktionen så kan du ange prioriteten som måste överskridas med ett prefixargument.

`Visa vilkalistan`
  LysKOM underhåller en lista över alla personer som är inne i LysKOM just nu och den kan man får fram i ett temporärt fönster med detta kommando. Höjden på detta fönster regleras med variabeln `kom-who-buffer-size-when-displaying`.

  Detta fungerar givetvis inte om man har slagit av hanteringen av Vilkabufferten. See section Vilkabufferten

`Kasta ut en session`
  Du kan slänga ut en session som har hängt sig eller som du glömt på någon annan maskin. Du kan bara slänga ut sessioner där personer som du är organisatör för är inloggade om du inte är i administratörsmod.

`äp`
`Ändra presentation`
  ändrar presentationen för ett möte eller en person. LysKOM frågar efter vilken person/möte som presentationen skall ändras för och placerar dig i redigeringsläge. Om du bara trycker `RET` så ändrar du din egen presentation.

`å `SPC``
`Återse text`
  Återse en eventuellt tidigare läst inlägg. Om du anger ett nummer direkt efter `å`:et så visar LysKOM dettaa inlägg. Om du ger ett mellanslag så frågar LysKOM efter inläggsnummer.

`åo`
`Återse omodifierat`
  Återse det senast föregående lästa inlägget utan att konvertera enligt konverteringstabellen.

`åk`
`Återse det kommenterade`
  Återse det eller de inlägg som det senast lästa inlägget är en kommentar till. Om inte det senast lästa är en kommentar utan ett originalinlägg så ger LysKOM ett felmeddelande.

`åak`
`Återse alla kommentarer`
  Återse alla inlägg som är kommentarer till det senast lästa inlägget.

`åar`
`Återse alla kommentarer rekursivt`
  Återse alla inlägg som är kommentarer till det senast lästa inlägget. Detta sker rekursivt så att även kommentarer till dessa kommentarer återses.

`år`
`Återse urinlägget`
  Återser originalinlägget som gav upphov till den kommentarkedja som det senast lästa inlägget ingår i.

`ån`
`Återse nästa`
  Återser nästa inlägg i återsestacken.

`ås`
`Återse senaste`
  Återse de senaste N inläggen av X i mötet M. LysKOM frågar efter personen X och mötet M. N är prefixargument.

  Om man inte ger något prefixargument sätts N`=1`. Om man anger N`=0` får man se alla inlägg av X till M. Om N är negativt så får du se de abs(N) första inläggen av X i mötet M.

  Om man inte anger X får man se de senaste N inläggen i mötet M. Default för mötet är det möte du är i. Om man inte anger M får man se de senaste N inläggen av X.

  M kan vara din egen brevlåda, men du kan inte återse inlägg till någon annans brevlåda. Det beror på en bug i server som kommer att rättas, förhoppningsvis före sommaren 1991.

`åi`
`Återse igen`
  Återse de senaste X normalt lästa inlägg.

`åh`
`Återse hoppa`
  Avslutar alla återsekommandon.

`ål`
`Återse lista`
  Visar vilka inlägg som kommer att återses, dvs resulatet av alla fortfarande aktiva återsekommandon.

`åp`
`Återse presentation`
  Frågar efter namnet på en person eller ett möte och visar presentationen för denna person/möte.

`åt`
`Återse träd`
  Samma som `Återse urinlägget` + `Återse alla kommentarer rekursivt` för det senast lästa inlägget.

`B`
`(Återse) Baklänges`
  Vänder på ordningen som de inlägg man gör återse på presenteras. Om man t ex återser de senaste N av någon så vill man kanske återse dem bakifrån i stället för framifrån.

`sm`
`Status (för) möte`
  Visar upp en del intressanta data för ett möte. Om mötet har en lapp på dörren så visas denna.

  Om man vill se en lista på alla medlemmar i mötet och hur många olästa de olika personerna har så skall man svara `j` på frågan. Annars skall man svara `n`.

`sp`
`Status (för) person`
  Visar upp en del intressanta data om en person. Om personen har en lapp på dörren så visas denna.

  Efter eventuell lapp så kan man få en lista på vilka möten personen är medlem i och hur många olästa han har i dem. Vill man inte ha denna lista skall man svara `n` på frågan.

### Spara ett eller flera inlägg

`st`
`Spara text (på fil)`
  Spara det senast lästa inlägget på fil. Frågar efter filnamn.

  Om man anger ett prefixargument sparas de sista `n` inläggen.

`M`
`Markera (inlägg)`
  Frågar efter inläggsnummer och markerar inlägget med ett nummer. Det senast lästa inlägget är default att markeras. Alla markerade inlägg eller markerade inlägg med en viss markering kan senare återses (se nedan).

  Om man inte har satt variabeln `kom-default-mark` till någonting så markeras inlägget med markeringen `100`. Om man satt variabeln `kom-default-mark` till `nil` så frågar den även efter vilket nummer markeringen skall ha.

`A`
`Avmarkera (inlägg)`
  Frågar efter inläggsnummer och tar bort den eventuella markeringen från det inlägget. Det senast lästa inlägget är default.

`åam`
`Återse alla markerade`
  återser alla inlägg som tidigare markerats med hjälp av `M` eller `Markera (inlägg)`.

`åm`
`Återse markerade`
  Frågar efter en markering och visar upp alla markerade inlägg med just den markeringen. Normalt markerar LysKOMs emacslispklient med markering 100. See section Variabler.

### Kommandon under annat

Här följer några funktioner som inte ligger på några egna tangenter, men som kan hittas under `a`

### Skapa

`Skapa möte`
  Skapa ett nytt möte.

`Utplåna`
  Utplåna en person eller ett möte. Om man inte är organisatör för mötet/personen så misslyckas kommandot.

`Radera (text)`
  Frågar efter inläggsnummer och raderar inlägget. Man kan även ange inläggsnumret som prefixargument.

### Kommandon för att addera och subtrahera.

Man kan addera en mottagare eller extra kopiemottagare till ett inlägg, en medlem till ett möte eller ett inlägg som kommentar till ett annat inlägg.

`Addera mottagare`
  Frågar efter inläggsnummer och namnet på ett möte eller en person. Defaultvärdet för inläggsnumret är senast lästa inlägg och defaultvärdet för mötet är det senast adderade mötet.

  Du får bara addera möten som du får lov att skriva inlägg i.

`Addera extra kopiemottagare`
  Samma som Addera mottagare men adderar en mottagare av typen extra kopiemottagare istället. Defaultvärdet för inläggsnumret är senast lästa inlägg och defaultvärdet för mötet är den senast adderade extra kopiemottagaren.

  Du får bara addera möten som du får lov att skriva inlägg i.

`Subtrahera mottagare`
  Frågar efter inläggsnummer och namnet på ett möte eller en person. Inlägget får då inte längre angivet möte eller person som mottagare. Defaultvärdet för i inläggsnumret är senast lästa inlägg och defaultvärdet för mötet/personen är det möte som vi står i just nu.

  Du får bara ta bort en mottagare om du är organisatör för mottagaren eller författare till inlägget.

`Addera kommentar`
  Frågar efter två inläggsnummer. Det första inlägget kommer att kommenteras av det andra. Default för det kommenterade inlägget är senaste refererade inläggen.

`Subtrahera kommentar`
  Frågar efter två inläggsnummer. Om det första inlägget, som har aktuellt inlägg som default, är kommenterad av det andra inlägget kommer denna bindning att plockas bort.

`Addera medlem`
  Frågar efter person som skall adderas samt till vilket möte. Detta kommando måste användas för att addera medlemmar till ett slutet möte och det är bara organisatören för det mötet som kan använda det. Det kan också användas för att addera medlemmar till en brevlåda, dvs en person, om man vill att någon annan skall kunna läsa dennes post. Ett exempel är om man vill skapa en brevgrupp där flera personer kan läsa posten som kommer till gruppen.

`Uteslut medlem`
  Frågar efter person som skall uteslutas samt vilket möte som personen skall uteslutas ifrån. Detta kommando kan t ex användas av organisatören för ett möte när han vill utesluta någon från mötet.

### Ändra personuppgifter

`Börja med nytt namn`
  Logga ut den nuvarande personen ur LysKOM och börja med en ny person utan att starta en ny session.

`Ändra namn`
  Frågar efter vilket möte eller vilken person som skall ändra namn samt det nya namnet. Om du inte är organisatör för mötet/personen så misslyckas kommandot.

`Ändra lösenord`
  Frågar efter vem du skall ändra lösenordet för, samt efter ditt lösenordet. Därefter skall du mata in det nya lösenordet två gånger. Detta för att fånga felstavningar.

  Man kan ändra lösenordet för alla som man är organisatör för. Om man är administratör kan man ändra lösenordet för vem som helst.

`Sätt lapp på dörren`
  Frågar efter möte eller person som du vill sätta en lapp på för. Lapp på dörren betyder att en person som försöker skicka brev till personen/mötet får ett meddelande innan brevet sänds iväg. Detta kan t ex vara användbart när man reser bort och vill lämna en temporär adress. Man får också se lappen när man använder kommandot `Status person` på personen.

`Ta bort lapp på dörren`
  Frågar efter möte eller person och tar bort lappen på dörren för personen/mötet i fråga.

### Ändra mötesuppgifter

`Ändra organisatör`
  Frågar först efter det möte eller en person som man vill ändra organisatör för. Sedan frågar den efter det möte eller den person som skall bli den nya organisatören. Om det inte gick bra så skrivs ett felmeddelande ut.

`Ändra livslängd`
  Frågar först efter det möte som du vill ändra inläggens livslängd i och sedan efter vilken den nya livslängden skall vara. Om du inte är organisatör för mötet så få du inte sätta en ny livslängd och då får du ett felmeddelande.

`Ändra supermöte`
  Frågar efter vilket möte vi skall ändra supermöte för samt vilket möte som skall vara det nya supermötet.

  Supermöte för ett möte är det möte till vilket inlägg som inte får skickas till mötet, skickas. Anledningarna till att inlägg inte får skickas till ett visst möte kan vara att det är skrivskyddat och han som försöker skicka in det tillhör inte de tillåtna författarna för det mötet eller att mötet är kommentarsskyddat och då skickas kommentarerna till supermötet.

  I nästa version av LysKOM-systemet (Protokoll B) kommer det att vara två olika möten beroende på om mötet är skrivskyddat eller kommentarsskyddat.

### Meddelande

`Sända meddelande`
  Frågar efter vem du vill skicka ett meddelande till. Personen måste vara inloggad när meddelandet skickas eftersom det inte lagras utan skickas direkt. Om du vill skicka till alla som är inloggade så tryck bara på `RET` utan att mata in något namn.

  Därefter frågar LysKOM efter meddelandet som du vill skicka och skickar iväg det till mottagarna.

### Prioritera

`Prioritera möten`
  Poppar upp en ny buffert som listar alla möten man är med i i den ordning de finns lagrade i servern. I den här bufferten har man tillgång till speciella kommandon för att kunna flytta om mötena och ändra prioritet på dem. De kommandon som finns är förutom de vanliga emacs-kommandona:

  `u`
    Flytta möte uppåt i listan. Med ett prefixargument flyttas mötet så många steg.

  `n`
    Flytta möte neråt i listan. Med ett prefixargument flyttas mötet så många steg.

  `p`
    ändra prioritet. Frågar efter ny prioritet på mötet.

  `C-k`
  `Kill`
    Lägger upp mötet på en kill-stack. Med ett prefixargument läggs de nästa X mötena på kill-stacken. Att ett möte ligger på kill-stacken markeras genom att första tecknet på raden är ett minustecken.

  `C-y`
  `Yank`
    Tar översta mötet från kill-stacken och stoppar in det före den rad du står på. Med ett prefixargument stoppas de X översta mötena in.

  `S`, `C-c C-c` eller `q`
    Synonymer för att återgå till LysKOM-bufferten. Du kan även gå till den genom att bara byta buffert (det är snabbaste sättet att böjra läsa igen) men då kan det hända att du får läsa saker och ting i fel ordning i den här sessionen.

  `C-k` och `C-y` passar bra för att flytta block av möten till olika ställen. `u` och `n` är bra för den sista "finjusteringen".

### Ändra inställningarna

Ändra variablerna
  Poppar upp en ny buffert som listar dina nuvarnade inställningar. Denna nya buffert har `edit-options` moden och ser dessutom likadan ut förutom det faktum att den bara innehåller de variabler som är av intresse för LysKOM. (See Info file `emacs', node `Edit Options'.)

  Alla kommandon funkar precis som i `edit-options` moden och de viktigaste är:

  `0`
    Sätt värdet till `nil`
  `1`
    Sätt värdet till `t`
  `s`
    Fråga efter värdet och sätt variabeln till det.
  `n`
    Gå till nästa variabel.
  `p`
    Gå till föregående variabel.

  När du är nöjd med dina inställningar och vill skicka in dem till LysKOM så trycker du `C-c C-c`.

  Om du ångrar dig och inte vill skicka in några värden till LysKOM så trycker du `C-c C-k`.

  Noteras bör att om du ändrar LysKOM-variabler på något annat sätt i din emacs än med kommandona beskrivna ovan så kommer det aktuella värdet att visas i bufferten och sparas.

  Om du däremot ändrar värdena i din emacs utan att efter det skicka in värdena (med `C-c C-c` i denna bufferten) så kommer inställningarna du gjort inte att sparas i LysKOM utan går förlorade.

## Administratörskommandon

`Övergå till administratörsmod`
  För att kunna utnyttja kommandona på denna sida måste man först övergå i administratörsmode som sker med detta kommando. Dessutom måste du ha administrativa rättigheter i databasen, för att kommandona skall fungera.

`Övergå till normalmod`
  När man inte längre vill köra i administratörsmod kan man slå av det med detta kommandot. Det hindrar dig att av misstag läsa inlägg som du inte får läsa mm.

`Stäng av servern`
  Sparar databasen och stänger av servern. Ofta finns det program som automatiskt startar om servern igen.

`Sätt loginmeddelande`
  Ändrar loginmeddelandet.

`Ta bort loginmeddelande`
  Tar bort loginmeddelandet.

# Namn

När du skall ange ett mötes- eller person-namn så räcker det att skriva en entydig bit av namnet. Till exempel så räcker det (för tillfället) att skriva ``ce'` för att logga in som ``ceder'`. Saker inom parentes räknas inte, så ``Anders Andersson'` och ``(Hej på dig) Anders (och) Andersson (!)'` är precis samma sak. Ofta kan man skriva ``m 10'` eller ``p 10'` i stället för ett möte/en person om man vet att mötet har nummer 10.

Om namnet består av mer än ett ord, t ex för- och efternamn, så behöver bara entydiga delar av resp. delar skrivas. Antag att två personer heter ``Lars Aronsson'` resp. ``Lars Andersson'`. ``L A'` ger ingen entydig matchning av namnet, men ``L Ar'` eller ``L An'` (eller ``l an'`) kan bara tolkas på ett sätt. Det räcker alltså i det här fallet att ange 4 tecken för att bestämma vilken person man menar. Detta gäller naturligtvis också för mötesnamn.

# Att skriva inlägg

För varje inlägg/kommentar man skriver får man upp en ny buffert. Man kan skriva på flera inlägg samtidigt, och det spelar ingen roll i vilken ordning man avslutar dem. Så länge som man har förbindelsen till servern igång så kan man skicka in inläggen.

Överst i bufferten finns ett antal rader som talar om vem, vad eller vilka som blir mottagare, och om det här är en kommentar till en (eller flera) inlägg. Man kan ändra i det här fältet, men man ska vara försiktig. Det finns fyra olika saker som kan stå här:

    Mottagare: <nr> Namn
    Extra kopia: <nr> Namn
    Kommentar till text nr.
    Fotnot till text nr.

`nr` är ett decimalt tal. `Namn` är ett mötesnamn. När man ändrar i de här fälten behöver man inte skriva så mycket. Det räcker med den första bokstaven i varje rad och numret. I de två första fallen skall numret stå inom klamrar. Ett exempel på hur man kan skriva är:

    M<6>
    E<80>
    K118
    K 148
    Fotnot 12.

Det här inlägget kommer att ha `möte 6` som mottagare. `Möte 80` får en extra kopia. (Den enda skillnaden mellan `Mottagare` och `Extra kopia` är att när någon kommenterar inlägget kommer kommentarerna bara att gå till de möten som står som mottagare). Inlägget är en kommentar till inlägg 118 och 148 och dessutom en fotnot till inlägg 12. (En fotnot och en kommentar är i stort sett samma sak, men det är bara författaren till ett visst inlägg som kan skriva en fotnot till den, och fotnoter till ett inlägg skrivs ut före alla kommentarer).

Klienten litar blint på det nummer man anger. Ingen kontroll görs att det stämmer med det som står efter klamrarna.

Man kan blanda rader av typ `M`, `E`, `K` och `F` i vilken ordning som helst, men det får inte finnas några andra rader före ärenderaden. (Inte ens en blankrad).

Om man vill skicka inlägget till ett annat möte än dem som står så måste man alltså veta numret på mötet. Det kan man ta reda på genom att byta buffert till LysKOM-bufferten (som normalt heter `*kom*` om du är kopplad mot lysators LysKOM-server) och där skriva `lm` eller `lp` (`Lista möten` resp. `Lista personer`). De nummer som skrivs ut är de mötesnummer som skall användas.

Efter alla `M`, `E`, `K` och `F`-rader skall det komma en ärenderad. Den skall se ut så här:

    Ärende: <Här ska du skriva en rubrik>

När du kommenterar ett inlägg får du dess ärende-rad som default.

Sen kommer en rad som bara har till uppgift att skilja texten från rubriken. Efter den raden skriver du ditt inlägg. Du har tillgång till alla vanliga emacs-kommandon.

Det enda som är speciellt är alla LysKOM-kommandona.

För att sända in inlägget trycker du `C-c C-c`. LysKOM frågar då efter `Ärende:` och du fyller i det. När du trycker `RET` så skickas inlägget in till servern. Om allt gick bra så tas edit-bufferten bort och du får tillbaks LysKOM-bufferten. Inläggsnumret för det skapade inlägget skrivs ut.

Om du när du skall skriva ärendet ser stavfel i inlägget trycker du `C-g` så kommer du tillbaka i editerings-mode.

Om man ångrar sig och vill slänga inlägget man håller på att skriva trycker man `C-c C-k`. Då tas bufferten bort, och man kommer tillbaks till LysKOM-bufferten.

Skulle du vilja ha med delar av det inlägg du kommenterar i ditt eget inlägg kan du trycka `C-c i k` och då kommer hela det kommenterade inlägget att läggas in där du var. Vill du i stället plocka in något annat inlägg så skall du istället trycka `C-c i` följt av inläggsnumret på det inlägg du vill ha med.

Om du bara vill titta på det inlägg du kommenterar eller fotnoterar (t ex om du inte har satt flaggan `kom-write-texts-in-window`, se nedan), men inte ha in det i inläggsbufferten så kan du trycka `C-c å k` så delas skärmen i två fönster och den kommenterade eller fotnoterade inlägget visas i det andra fönstret. För att spara plats så visas endast inlägget och inte texthuvudet.

Om du vill lägga till någon extra mottagare eller kopiemottagare till inlägget trycker du `C-c a m` resp. `C-c a k` och så får du ange vem eller vilket möte du skall lägga till.

# Vilkabufferten

LysKOMs Emacslispklient upprätthåller en lista på vilka som är inloggade och vad de sysslar med i den så kallade vilkabufferten. Man kan se vad alla gör hela tiden om man har den framme, annars finns den bara i bakgrunden.

Denna finess drar ansenliga mängder extra cpu-kraft från maskinen du kör klienten på. Därför finns det möjlighet att slå av den. Har man väl slagit av den finns de däremot ingen möjlighet att slå på den igen utan att starta om LysKOM.

# Flaggor

LysKOMs Emacslispklient har ett antal flaggor för att användaren skall kunna anpassa uppförandet till sin smak. Flaggorna sparas med kommandot `Ändra variabler`.

Här följer en lista över dessa flaggor samt vilka värden de kan anta och deras betydelse i programmet.

Flaggorna dokumenteras genom att deras namn skrivs ut följt av deras defaultvärde. I inlägget som förklarar flaggan listas möjliga värden. Om ett annat värde än defaultvärdet önskas så skall man använda funktionen `Ändra variabler`. Man kan också använda emacsfunktionen `M-X set-variable` men då får man se till att spara variabelns värde efteråt.

De flaggor som sparas i `common`-delen av user-arean är markerade med `common`, de som per default sparas i `elisp`-delen med `elisp`.

`kom-created-texts-are-read`
`t` (`common`)
  Om icke-`nil` så markeras alla inlägg som skapas av användaren som lästa.

`kom-reading-puts-comments-in-pointers-last`
`t` (`common`)
  Om `nil` så skrivs rader av typen ``Kommentar i text N av NN'` i inläggshuvudet. Om icke-`nil` så skrivs dessa rader ut efter själva inlägget.

`kom-print-number-of-unread-on-entrance`
`t` (`common`)
  Om icke-`nil` så skrivs antalet olästa i ett möte ut så fort användaren går in i ett möte.

`kom-higher-priority-breaks`
`nil` (`elisp`)
  Denna flagga avgör hur ett nytt inlägg i ett möte med högre prioritet skall bryta läsningen av inlägg. Brytningen går till så att man får upp prompten Läsa nästa prioriterade inlägg - eller Gå till nästa prioriterade möte - och sedan läser man det nyss inlagda inlägget istället för det som man normals skulle läst i mötet. Efter prompten Läsa nästa prioriterade inlägg kommer man tillbaka till exakt det ställe där man var.
  `nil`
    Bryter inte alls. Vi får vänta tills vi läst ut hela mötet.
  `t`
    Bryter när vi läst klart ett kommentarsträd, alltså när vi normalt skulle fått prompten Läsa nästa text.
  `express`
    Vi bryter mötet direkt, utan hänsyn till var vi är i kommentarkedjan.

  - `kom-presence-messages`
  - `t` (`common`) Om icke-`nil` så skriver klienten ut fortlöpande rapporter om vilka som går in i och ut ur LysKOM.

  - `kom-presence-messages-in-buffer`
  - `presence` (`elisp`) Denna flagga reglerar vilka av LysKOMs meddelanden som skrivs in i själva LysKOM-bufferten. De som inte skrivs in i bufferten fås enbart på meddelanderaden och övriga skrivs både i meddelanderaden och i bufferten. Denna flagga kan anta tre värden:
    `nil`
      Inga närvaromeddelanden skrivs ut.
    `presence`
      Meddelanden om vem som går in i och ut ur skrivs in i bufferten, övriga meddelanden skrivs endast ut på meddelanderaden.
    `t`
      Alla meddelanden skrivs in i bufferten. Detta inkluderar, förutom de som fås genom att sätta värdet till "presence", även meddelanden om vad olika personer som är i samma möte som du gör.

  - `kom-show-where-and-what`
  - `t` (`elisp`) Om icke-`nil` så skriver klienten ut vilken maskin varje användare kör ifrån samt vad han håller på med när kommandot `Vilka är inloggade` ges.

  - `kom-read-depth-first`
  - `t` (`common`) Om icke-`nil` så läses kommentarer och fotnoter före nya inlägg. Detta gör att kommentarsträd söks av djup-först. Om flaggan sätts till `nil` så görs sökningen bredd-först.

  - `kom-dashed-lines`
  - `t` (`common`) Om denna variabel är icke-`nil` så ramar klienten in alla inlägg med långa rader av `-`.

  - `kom-confirm-multiple-recipients`
  - `t` (`elisp`) Om icke-`nil` så måste man bekräfta att alla mottagare skall ha inlägget. Om det bara finns en mottagare frågar den aldrig.

  - `kom-emacs-knows-iso-8859-1`
  - `nil`

    Denna variabel skiljer sig från andra i det avseendet att den inte lagras i servern utan bara är lokal för just din emacs.

    Om variabeln inte är till`nil` så kommer emacsen inte att konvertera alla tecken den skriver ut till swascii.

# Variabler

Det finns ett antal variabler som man kan styra LysKOMs emacslispklients uppförande med. Dessa är inte flaggor i den meningen att de inte bara kan anta ett av flera fördefinierade värden, utan kan anta nästan vilka värden som helst. Variabler i emacs sätts på samma sätt och sparas på samma sätt som flaggor.

De variabler som sparas i `common`-delen av user-arean är markerade med `common`, de som per default sparas i `elisp`-delen med `elisp`.

`kom-mercial`
`"Väntar.`" (`elisp`)
  Denna variabel innehåller den sträng som skrivs ut varje gång man inte har något nytt att läsa. Användaren uppmuntras att använda humor och kvickhet i användandet av den.

`kom-default-mark`
`100` (`common`)
  Om denna flagga är icke-`nil` så måste den vara ett nummer mellan 1 och 255. Det är den markering som klienten sätter. är den `nil` däremot så frågar klienten efter vilken markering vi skall ha.

`kom-page-before-command`
`nil` (`elisp`)
  Om denna flagga är `t` kommer klienten att göra en `(recenter 0)` före varje kommando börjar utföras. Om flaggan är en lista av symboler kommer klienten att göra `(recenter 0)` före varje kommando som finns i denna lista. Detta för att utmatningen från alla kommando skall hamna på samma ställe på skärmen.

`kom-write-texts-in-window`
`nil` (`elisp`)
  Om `nil` så används LysKOM-fönstret även som edit-fönster. Om det är en buffert eller en sträng så kommer det fönster som denna buffert visades i att användas. Om 'other så kommer emacs att välja ett annat fönster eller skapa ett nytt fönster för denna editering.

`kom-membership-default-priority`
`100` (`elisp`)
  Defaultprioritet som används när man blir medlem i ett möte. Om denna variabel sätts till `nil` så frågar LysKOM efter en prioritet varje gång istället.

`kom-membership-default-placement`
`last` (`elisp`)
  Den här variabeln styr var möten som man blir medlem i placeras i listan av möten som man är medlem i. Denna lista används för att avgöra vilken ordning man får läsa mötena i.

  Följande värden kan användas:

  `first`
    så stoppas nya möten in först.
  `last`
    så stoppas nya möten in sist.
  ett tal
    så kommer nya möten att stoppas in på denna position i listan. Värdena `0` respektive ett stort tal kommer att ha samma effekt som `first` respektive `last`.

  - `lyskom-header-separator`
  - (`elisp`) Detta är den sträng som skiljer texten från huvudet när man skriver inlägg. Default:

        "--- Skriv nedan. Skicka in=C-c C-c, Avbryt=C-c C-k, Annat se C-h m ---"

  - `lyskom-prompt-text`
  - `" - "` (`elisp`) Prompten slutar med texten i denna variabel när LysKOM är redo att ta emot kommandon.

  - `lyskom-prompt-executing-default-command-text`
  - `"."` (`elisp`) När man ger defaultkommandot med `SPC`, `LFP` eller `RET` så bytas slutet av prompten till denna text.

  - `kom-who-buffer-size-when-displaying`
  - `10` (elisp) Antalet rader som Vilkabufferten skall visas med när man ger kommandot `Visa vilkalistan`. See section Vilkabufferten och section övriga kommandon i LysKOM..

  - `kom-do-when-starting`
  - `nil` (`elisp`) Denna variabel innehåller kommandon som skall utföras automatiskt när man loggar in. Variabeln är en lista av kommandon.

    Exempel:

    Om du stoppar in:

        (setq kom-do-when-starting '("v" "ln"))

    i din ``.emacs'` så händer följande när du går in i LysKOM:

        Gå till nästa möte - Vilka är inloggade
            <Här får du se vilka som är inloggade>
        Gå till nästa möte - Lista nyheter
            <Här får du se din lista av nyheter>
        Gå till nästa möte -

  - `kom-do-when-done`
  - `(kom-review-all-marked-texts kom-display-time)` (`elisp`) Denna variabel innehåller kommandon som utförs då man har läst klart alla inlägg. Varje kommando i listan skriver först ut en prompt och där kan du naturligtvis göra alla de vanliga kommandona också.

    Om ett element i `kom-do-when-done` är en lista, kommer elementen i den listan att utföras i tur och ordning. Det sista elementet i `kom-do-when-done` kommer att upprepas tills man går ur LysKOM.

    Ett exempel klargör nog dess funktion bäst.

    Om man har stoppat in

        (setq kom-do-when-done '("åm" "t" ("q" "fu")))

    i sin .emacs kommer följande beteende att uppvisas när man läst slut: @nobreak

        Läsa nästa text -          ; Detta är det sista inlägget.
             <Här läser vi inlägget.>
        Återse (alla) markerade -
        Återse nästa text -        ; Vi har bara ett markerat.
        Se tiden -                 ; Innan vi hinner trycka SPC här,
                                   ; kommer det ett nytt inlägg, varvid
                                   ; prompten byts till...
        Läsa nästa text -
        Se tiden -                 ; Nu har vi läst inlägget.
        Sluta -                    ; Vi svarar no.
        Kommandot:"fu" -           ; Tangentbordsmakro
                                   ; Här får du uppmuntran.
        Sluta -                    ; Här kommer "sluta" tillbaka.
                                   ; Vi svarar no här också.
        Kommandot:"fu"             ; Och "fu" dyker upp igen.
        Sluta -                    ; Och sluta igen.

    Elementen måste vara kommandon i LysKOM, dvs de måste kunna tolkas som tangentbordsmakron eller som emacs-funktioner.

  - `lyskom-fetch-map-nos`
  - `50` (`elisp`) Anger hur stora mappar vi skall hämta i taget.

  - `lyskom-prefetch-conf-tresh`
  - `50` (`elisp`) Avgör om vi skall fråga efter fler möten från servern. Om de olästa inläggen i de hittills hämtade mötena är färre än detta värde så hämtar vi en bunt till.

  - `lyskom-prefetch-confs`
  - `10` (`elisp`) Avgör hur många möten vi skall fråga efter i taget.

  - `lyskom-prefetch-texts`
  - `3` (`elisp`) Avgör hur många inlägg som skall hämtas i förväg.

# Hookar

Det finns en del hookar i LysKOMs emacslispklient. En hook är en variabel som användaren kan definiera till en funktion. Varje hook hör ihop med en speciell företeelse som LysKOMs emacslispklient gör. Om hooken är satt så exekveras funktionen som den är satt till när detta händer. För närmare information om vad en hook är kan du läsa emacs- dokumentationen. (See Info file `elisp', node `Hooks'.)

De hookar som sparas i `common`-delen av user-arean är markerade med `common`, de som per default sparas i `elisp`-delen med `elisp`.

`lyskom-init-hook`
  Denna anropas efter det att hela klienten laddats in. Kan användas för att definiera om några LysKOM-funktioner eller ladda egna funktioner.

`lyskom-mode-hook`
  Denna anropas när LysKOM-bufferten skapas. Kan t.ex användas för att ställa in sina egna bindningar till tangenter, lokalt i den bufferten.

`lyskom-new-text-hook` (`elisp`)
  Denna anropas när klienten får meddelande om att ett nytt inlägg har skapats. Först stoppas inlägget in i alla listor och registreras, sedan tas prompten bort. Därefter anropas denna hook. Sedan skrivs den nya prompten ut. Denna hook kan alltså sortera om inläggen eller fixa till andra saker som ger en annan prompt än default.

  Om man inte vill att klienten sedan skall skriva ut meddelandet: ``Text 4711 är skapad'` så måste man sätta den lokala variabeln `no-message` till någonting non-`nil` i denna hook. Man kan använda sig av att den lokala variabeln `text-stat` är bunden till text-status för det inlägg som förorsakar att hooken körs.

`lyskom-who-info-has-changed-hook` (`elisp`)
  Denna anropas varje gång någonting i vilkabufferten har ändrats. Observera dock att aktuell buffert är LysKOM-bufferten, inte vilkabufferten. Kan vara bra om man till exempel vill visa vilkabufferten när ens kompis loggar in i LysKOM.

`lyskom-edit-mode-mode-hook`
  Denna anropas när man skall skriva ett inlägg. Om man vill ändra vilken mode man skall använda när man skall skriva sitt inlägg skall man sätta det i denna hook. LysKOM-systemet binder sedan om ett par tangenter till, just för att man skall kunna lägga in inlägget mm. men den grundläggande moden kan sättas med denna hook.

  Ex:

      (setq lyskom-edit-mode-mode-hook 'swedish-mode)

  Detta exempel förutsätter dock att du har en swedish-mode definierad.

  Om du binder om tangenter till att generera andra bokstäver i denna mode så kommer de inte bara att gälla i edit-bufferten utan även i minibufferten när du ändrar ärendet.

`lyskom-edit-mode-hook`
  Denna anropas efter det att LysKOM har gjort alla sina initieringar men innan du tillåts börja skriva inlägget. Här lägger du in saker som du vill göra med edit-bufferten. Kanske slå av `auto-save-mode` eller sätta `fill-column`.

  Inte att förväxla med `lyskom-edit-mode-mode-hook`.

`lyskom-prioritize-mode-hook`
  Denna anropas när man skapar prioritize-bufferten. Man kanske vill ha lite privata funktioner laddade eller andra tangentbordsbindningar i den moden.

`kom-quit-hook`
  Denna anropas när man har avslutat sin kom-session. T.ex om man vill döda sin emacs då.

`kom-after-command-hook`
  Denna anropas när ett kommando är helt utfört och det är dags att ge nästa kommando.

# Environmentvariabler

`KOMSERVER`
  Default komserver. Om `KOMSERVER` är satt så slipper användaren mata in vilken server som skall användas vid första inloggningen. Annars är default ``kom.lysator.liu.se'`.

`KOMNAME`
  Default användarnamn. Om `KOMNAME` är satt så frågar klienten inte efter ditt namn vid första inloggningen.

`KOMPASSWORD`
  Default lösenord. Om `KOMPASSWORD` är satt så frågar inte klienten efter ditt lösenord vid första inloggningen. Det är ganska olämpligt att ha `KOMPASSWORD` satt utan att samtidigt ha `KOMNAME` satt. Observera att på vissa UNIX-system så kan vem som helst se dina environmentvariabler med hjälp av `ps -axeww`.

# Buggrapporter

Det finns troligtvis många fel i klienten. Om du stöter på något som borde fungera annorlunda, eller som inte fungerar alls, så skriv ett mail till ``bug-lyskom@lysator.liu.se'`. Synpunkter på den här texten och systemet i övrigt kan också skickas dit.

En buggrapport skall innehålla information om:

Vilken emacs du kör. Namn och versionsnummer.
Vilken version av LysKOMs emacslispklient du kör.
Vilken LysKOM-server du har kopplat upp dig mot och versionsnummer.

Det är bra om buggrapporten innehåller all tillgänglig information från din körning. Dvs att du har kört funktionen `kom-bug-report` och skickat med resultatet. Annars måste det till en extremt utförlig beskrivning på hur felet uppkom för att vi skall ha någon som helst möjlighet att veta vad det handlar om.

Om du skulle råka fixa felet själv så skicka med en context-diff så kan vi lätt applicera den.

Om du inte har tillgång till mail så kan du skicka dina buggrapporter med vanligt brev till:

    	Lysator
    	c/o ISY
    	Linköpings University
    	S-581 83 Linkoping
    	SWEDEN

Observera att det faktum att du skickar in en buggrapport inte på något sätt är en garanti för att buggen kommer att fixas till en senare version av klienten, eller ens att det någonsin blir en senare version av klienten.

Om du däremot undviker att skicka in en buggrapport så finns det en möjlighet att ingen någonsin får reda på just din bugg.

Om du tvunget vill ha en viss bugg rättad så finns det företag som åtar sig sådant arbete. Skicka brev till ``bug-lyskom@lysator.liu.se'` så kan vi förmedla en sådan företagskontakt.

# Filer

``lysator:/usr/local/lib/elisp/lyskom.el'`
  Senaste versionen av klienten.
``lysator:~ftp/pub/lyskom/elisp-client/lyskom-ver.nr.elc'`
  D:o

# Index

## (

- (Spring till) början av texten
- (Spring till) nästa text

  ## a

- Addera extra kopiemottagare
- Addera kommentar
- Addera medlem
- Addera mottagare
- Avmarkera (inlägg)

  ## b

- Baklänges
- Bli medlem i möte
- Börja med nytt namn
- Början av texten

  ## e

- Endast läsa senaste

  ## f

- Fotnot till inlägg
- Få skäll
- Få uppmuntran
- Föregående inlägg

  ## g

- Gå till möte
- Gå till nästa möte

  ## h

- Hjälp
- Hoppa över alla kommentarer

  ## k

- Kasta ut en session
- kom-bug-report
- Kommentera föregående inlägg
- Kommentera inlägget

  ## l

- Lista medlemsskap
- Lista möten
- Lista nyheter
- Lista personer
- Lista ärenden
- Läsa nästa inlägg

  ## m

- Markera (inlägg)

  ## n

- Nästa text

  ## p

- Personligt svar
- Personligt svar på föregående inlägg
- Prioritera möten

  ## r

- Radera (text)

  ## s

- scroll-down
- Scrolla ner
- Se tiden
- Skapa möte
- Skicka brev
- Skriva ett inlägg
- Sluta
- Spara text (på fil)
- Status (för) möte
- Status (för) person
- Stäng av servern
- Subtrahera kommentar
- Subtrahera mottagare
- Sända meddelande
- Sätt lapp på dörren
- Sätt loginmeddelande

  ## t

- Ta bort lapp på dörren
- Ta bort loginmeddelsde

  ## u

- Uppskjuta läsning
- Uteslut medlem
- Utplåna
- Utträda ur

  ## v

- Vilka är inloggade
- Visa vilkalistan
- Vänta på ett inlägg

  ## Ä

- Ändra livslängd
- Ändra lösenord
- Ändra namn
- Ändra organisatör
- Ändra presentation
- Ändra supermöte
- Ändra variablerna

  ## Å

- Återse alla kommentarer
- Återse alla kommentarer rekursivt
- Återse alla markerade
- Återse det kommenterade
- Återse hoppa
- Återse igen
- Återse lista
- Återse markerade
- Återse nästa
- Återse omodifierat
- Återse presentation
- Återse senaste
- Återse text
- Återse träd
- Återse urinlägget
- Återstarta kom

  ## Ö

- Övergå till administratörsmod
- Övergå till normalmod

# Tangenterna

## ?

- ?

  ## a

- a
- A

  ## b

- b
- B

  ## c

- C-u F
- C-u k
- C-u p

  ## d

- DEL

  ## e

- e

  ## f

- F
- fs
- fu

  ## g

- g

  ## h

- h

  ## i

- i

  ## k

- k
- K

  ## l

- LINEFEED
- lm
- ln
- lN
- lp
- ls
- lä

  ## m

- M
- m
- M-n
- M-p
- M-x kom-recover
- mellanslag

  ## n

- NEWLINE
- ni
- nm

  ## p

- P
- p

  ## q

- q

  ## r

- RETURN
- rymdkrogen

  ## s

- S
- sm
- sp
- space
- SPC
- st

  ## t

- t

  ## v

- V
- v

  ## ä

- äp

  ## å

- å
- åak
- åam
- åar
- åh
- åi
- åk
- ål
- åm
- ån
- åo
- åp
- år
- ås
- åt

# Variabelindex

## k

- kom-after-command-hook
- kom-confirm-multiple-recipients
- kom-created-texts-are-read
- kom-dashed-lines
- kom-default-mark
- kom-do-when-done
- kom-do-when-starting
- kom-emacs-knows-iso-8859-1
- kom-higher-priority-breaks
- kom-membership-default-placement
- kom-membership-default-priority
- kom-mercial
- kom-page-before-command
- kom-presence-messages
- kom-presence-messages-in-buffer
- kom-print-number-of-unread-on-entrance
- kom-quit-hook
- kom-read-depth-first
- kom-reading-puts-comments-in-pointers-last
- kom-show-where-and-what
- kom-who-buffer-size-when-displaying
- kom-write-texts-in-window
- KOMNAME
- KOMPASSWORD
- KOMSERVER

  ## l

- lyskom-edit-mode-hook
- lyskom-edit-mode-mode-hook
- lyskom-fetch-map-nos
- lyskom-header-separator
- lyskom-init-hook
- lyskom-mode-hook
- lyskom-new-text-hook
- lyskom-prefetch-conf-tresh
- lyskom-prefetch-confs
- lyskom-prefetch-texts
- lyskom-prioritize-mode-hook
- lyskom-prompt-executing-default-command-text
- lyskom-prompt-text
- lyskom-who-info-has-changed-hook