Emacs

Bakgrunn

Den originale EMACS var et sett av Editor MACroS for tekstredigeringsprogrammet TECO. Makroene ble skrevet i 1975 av Richard Stallman. I starten ble arbeidet gjort sammen med Guy Steele. Inspirasjonskilden kom fra TECMAC og TMACS som også var TECO makroer som implementerte tekstredigeringsegenskaper. Disse var skrevet av Guy Steele, Dave Moon, Richard Greenblatt, Charles Frankston, og andre.

Historie

Historien til Emacs begynner ved MIT Artificial Intelligence Laboratory på 1970-tallet. Før den ble introdusert var standardeditoren på Incompatible Timesharing System (ITS), som var operativsystemet på AI-laboratoriets PDP-6 og PDP-10 maskiner, en linjeorientert editor TECO. I TECO var det å skrive, redigere og vise dokumentet forskjellige moduser. I så henseende lignet TECO på det senere vi. Det å skrive bokstaver til TECO plasserte ikke disse bokstavene inn i dokumentet. Det var nødvendig å gi en serie instruksjoner i TECOs kommandospråk som fortalte den at den skulle legge inn de nødvendige bokstavene. I mellomtiden ble ikke den redigerte teksten vist på skjermen. Dette ligner på editoren ed som fremdeles finnes.
Richard Stallman besøkte Stanford AI Lab i enten 1972 eller 1974 og så laboratoriets teksteditor E. Dette programmet hadde en intuitiv WYSIWYG-oppførsel slik det er tilfelle i nesten alle moderne teksteditorer. Dette imponerte Stallman. Ved MIT hadde en av programmererne, Carl Mikkelsen, implementert en visningsredigeringsmodus kalt Control-R til TECO. Denne modusen oppdaterte skjermen hver gang en bruker trykket på en tast. Da Stallman returnerte til MIT reimplementerte han denne modusen slik at den fungerte effektivt. Han la også til en makrofasilitet som lot brukeren redefinere et hvilket som helst tastetrykk til å kjøre et TECO-program.

Flere varianter

Den originale Emacs kjørte, i likhet med TECO, bare på PDP-10. Mange Emacsaktige teksteditorer ble skrevet i de neste årene for andre systemer. Blant disse er SINE (SINE is not EMACS), EINE (EINE is not EMACS) og ZWEI (ZWEI Was EINE Initially). Disse ble skrevet av Michael McMahon and Daniel Weinreb. I 1978 skrev Bernard Greenberg Multics Emacs på Honeywells Cambridge Information Systems Lab. Multics Emacs ble skrevet i Maclisp, som var en dialekt av programmeringsspråket Lisp. Her var også brukerutvidelsene skrevet i Lisp. Det viste seg å forbedre utvidelsesmulighetene i forhold til alle tidligere varianter, og har vært brukt siden.
EMACS ble bygget på TECO, men fungerte tilstrekkelig forskjellig fra denne til å bli betraktet som en egen teksteditor. EMACS ble raskt standard redigeringsprogramm på ITS. Det ble konvertert til operativsystemene Tenex og TOPS-20 av Michael McMahon, men ikke til Unix. Den første Emacslignende tekstredigerer som kunne brukes på Unix var Gosling Emacs som James Gosling skrev i 1981. Det ble skrevet i programmeringsspråket C. Utvidelsesspråket var Mocklisp som hadde en syntaks som lignet på Lisp.

GNU Emacs

Gosling Emacs var proprietær programvare i 1984. For å skape et fritt alternativ begynte Stallman det året å arbeide på GNU Emacs. Han baserte seg i startfasen på Gosling Emacs, men erstattet Mocklisp med en ekte Lisp interpret. Dermed måtte nesten all koden erstattes. Det ble det første programmet i GNU prosjektet. GNU Emacs og dets utvidelsesspråk (Emacs Lisp) ble skrevet i C.
De tidlige versjonene hadde hatt versjonsnummer av mønster 1.x.x, men etter versjon 1.12 bestemte man seg for å sløyfe det ledende tallet 1 ettersom man antok at det aldri ville komme til å bli endret. Versjon 13 var den første som ble sluppet, og 15.34 ble den første til å bli utbredt.
I likhet med forgjengeren Gosling Emacs kjørte GNU Emacs på Unix. Av disse to hadde GNU Emacs flere egenskaper, ikke minst en fullstendig Lisp-implementasjon. Dermed overtok GNU Emacs rollen som Emacs på Unix.

XEmacs

En tidlig alfaversjon av GNU Emacs 19 ble utgangspunktet for den mest kjente tidlige forgrening av et fritt program. Det var Jamie Zawinski som sammen med andre ved Lucid Inc. utviklet Lucid Emacs i 1991. Kildekodebasen ble raskt forskjellig, og forsøkene på å forene grenene ble oppgitt. Lucid Emacs ble siden gitt navnet XEmacs, og er sammen med GNU Emacs de to dominerende variantene.

Egenskaper

Resten av denne artikkelen handler om GNU Emacs og XEmacs. De er de to eneste versjonene av Emacs som er i utstrakt bruk idag. «Emacs» vil referere til begge to siden de er svært like i sine egenskaper. XEmacs startet som en fork av GNU Emacs, og nyere versjoner har forblitt noenlunde kompatibel med den.
Emacs er et av kraftigste og mest fleksible tekstredigeringsverktøy som eksisterer. Den er beregnet først og fremst på å redigere innholdet, ikke til å endre skrifttyper og utseende slik GUI-baserte kontorverktøy idag gjerne er. (Det betyr ikke at Emacs ikke kan brukes til dette.)
Emacs tilbyr en rekke funksjoner til det som kan se ut som en relativt enkel oppgave, å redigere tekst. Funksjonene varierer fra kommandoer som manipulerer ord, og paragrafer (fjerne dem, flytte dem, flytte forbi dem osv) via syntaksfremheving (ved for eksempel fargebruk) for å gjøre kildekode lettere å lese til å gjenta en vilkårlig sekvens av kommandoer som brukeren har definert som en tastaturmakro.
Funksjonsrikdommen i Emacs er et resultat av den uvanlige designen hvor nesten enhver funksjon helt ned til det å legge inn et enkelt tegn inn i dokumentet er kontrollert av en Lispfunksjon. Lispmiljøet (Emacs Lisp) gjør det mulig å endre variabler eller metoder underveis i redigeringen uten at Emacs må rekompileres eller restartes. Oppførselen kan følgelig endres nesten uten noen grenser. Dette kan brukeren selv gjøre, men vanligvis gjøres det ved at ferdige biter Lispkode lastes inn. Disse kodebitene kalles biblioteker, pakker eller utvidelser.

Minneforbruk

Ulempen med at Emacs er lispbasert er at det koster resurser å laste biblioteker samt å kjøre kode som ikke er kompilert til maskinkode. Dette var spesielt merkbart på de tidlige systemene hvor Emacs ble implementert. Der var det ofte merkbar hastighetsforskjell på Emacs og dens rivaler. Det finnes flere spøkefulle akronymer på engelsk som hinter til dette: Eight Megabytes And Constantly Swapping (Åtte megabyte og kontinuerlig swapping – fra dengang hvor åtte megabyte var svært mye minne) Emacs Makes A Computer Slow (Emacs gjør en datamaskin langsom), og Eventually Mallocs All Computer Storage (Allokerer tilslutt alt minne). Idag er imidlertid datamaskinene så raske at Emacs sjelden føles langsom. Det er faktisk slik at Emacs er raskere å starte enn de fleste moderne teksteditorer. Et annet spøkefullt akronym griper fatt i brukergrensesnittet: Escape Meta Alt Control Shift.

Plattformer

Emacs er et av de ikketrivielle programmer som er portet til flest operativsystemer. Disse inkluderer de fleste Unix-lignende systemer (GNU/Linux, diverse varianter av BSDs, Solaris, AIX, IRIX, Mac OS X, osv.), MS-DOS, Microsoft Windows og OpenVMS.
Emacs kan brukes både i en tekst-terminal og med et grafisk brukergrensesnitt. På Unixlignende operativsystemer bruker Emacs vindussystemet X som grunnlag for sin GUI. Den kan gjøre det enten direkte eller ved å bruke et «widget toolkit» som Motif, LessTif eller GTK+. Emacs kan også bruke systemets egen grafikk på Mac OS X (Carbon) og Microsoft Windows. Det grafiske grensesnittet tilby menyer, toolbar og kontekstmenyer.

Redigeringsmoduser

Emacs tilpasser sin oppførsel til den type tekst den redigerer ved å velge en modus som passer til oppgaven. Det finnes overordnede og underordnede moduser. En overordnet modus (major mode) finnes definert for vanlige tekstfiler, kildekodefiler for mange forskjellige programmeringsspråk, HTML dokumenter, TeX og LaTeX dokumenter og mange andre typer tekst. Hver overordnet modus tilpasser bestemte Emacs Lisp variable slik at Emacs skal ha velegnede funksjoner. En av de vanlige funksjonene er syntaksfremheving, vanligvis ved fargebruk, for å synliggjøre spesielle nøkkelord, kommentarer og lignende. overordnede moduser sørger også for spesielle redigeringskommandoer. For eksempel har en modus for et programmeringsspråk vanligvis navigasjonskommandoer for å flytte til begynnelsen eller slutten av en funksjon.
En fil som redigeres knyttes til ett buffer, og hvert buffer har en overordnet modus knyttet til seg. I tillegg kan det være et antall underordnede moduser i funksjon. En underordnet modus implementerer for eksempel forskjellige innrykkstiler i programmeringsspråket C.

Individuell tilpasning

Mange brukere av Emacs tilpasser den til sitt eget behov. Det gjøres i hovedsak en av tre måter.
Den første er å bruke "skreddersy"-pakken, som tillater brukeren å sette vanlige tilpasninger ved hjelp av spesielle variable ved hjelp av et grafisk brukergrensesnitt. Disse variablene kan bestemme for eksempel fargeskjema. Denne metoden er beregnet på de som ikke ønsker å benytte Emacs Lisp-kode. Dette gjør den velegnet for nybegynnere.
Den andre måten er å samle tastetrykk til en tastaturmakro og få dem gjentatt for å automatisere komplekse oppgaver som skal gjentas mange ganger. Dette er en metode som vanligvis gjøres ad hoc og hvor makroene glemmes etter bruk. Det er imidlertid mulig å lagre dem for å bruke dem igjen senere.
Den tredje metoden er å bruke Emacs Lisp. Vanligvis er slik brukerspesifikk kode lagret i en fil som kalles .emacs. Denne leses når Emacs starter. .emacs-filen er ofte brukt til å sette variable og til å endre key-binding til noe annet enn standard. Dette kan for eksempel være nyttig når standard tastekombinasjon er upraktisk med et norsk tastatur. .emacs-filen kan også brukes til å lage helt nye kommandoer. Mange avanserte brukere har .emacs-filer som kan være hundrevis linjer lange. Disse kan medføre at Emacs oppfører seg svært forskjellig fra det som er vanlig.

Pakker

Hvis et stykke Emacs Lisp-kode er nyttig, pakkes det ofte som et bibliotek og distribueres til andre brukere. Mange slike tredjeparts biblioteker kan finnes på Internett. Et eksempel er et bibliotek som kalles wikipedia-mode. Den er til for å redigere Wikipedia-artikler. Det er en egen Usenet-diskusjonsgruppe, gnu.emacs.sources, som brukes for å poste nye pakker. Noen tredjeparts pakker har etterhvert blitt en del av standardbibliotekene.

Hjelpesystemet

Den første Emacs hadde et kraftig bibliotek for å hjelpe brukeren. Det kunne vise dokumentasjon for hver eneste funksjon, variabel og intern funksjon. Det er mulig at Emacs er opprinnelsen til denne teknikken. Det gjorde at Emacs ble beskrevet som selvdokumenterende.
Denne måten brukes fortsatt, og gjør dokumentasjonen lett tilgjengelig. For eksempel kan en bruker finne hvilken kommando som er bundet til en bestemt tastekombinasjon ved å trykke C-h k (Kontroll-h etterfulgt av minuskel k) etterfulgt av den ønskede tastekombinasjonen. (C-h k kjører kommandoen describe-key). Definisjonen av enhver funksjon inneholder en dokumentasjonsstreng som er ment å skulle presenteres på denne måten. Denne metoden har siden spredd seg til programmeringsspråk som Lisp og Java.
Emacs hjelpesystem er ikke bare til for nybegynnere, men er også nyttig for avanserte brukere som skriver Emacs Lisp-kode. Hvis dokumentasjonen for en funksjon eller variabel ikke er nok, kan hjelpesystemet brukes til å lete gjennom Emacs Lisp-koden etter såvel innebygde biblioteker som installerte tredjepartsbiblioteker. Dette gjør det svært gunstig å bruke Emacs hvis man skal skrive Emacs Lisp-kode.

Internasjonalisering

Emacs støtter redigering av tekst skrevet i mange språk. Det finnes støtte for mange skriftsystemer, skriftmetoder og kulturelle konvensjoner. Emacs støtter stavekontroll for mange språk ved å kalle opp eksterne programmer som ispell. Mange kodesystemer for tegnsett er støttet, inkludert UTF-8. XEmacs versjon 21.5 har delvis støtte for Unicode. GNU Emacs 21.4 har tilsvarende støtte, og versjon 22 skal forbedre den støtten ytterligere. Denne støtten for forskjellige kodesystemer er basert på en egen internrepresentasjon som nødvendiggjør en oversettelse ved lesing og skriving. UTF-8 vil bli brukt som den interne representasjonen fra noen sene versjoner av XEmacs 21.5 og sannsynligvis i GNU Emacs 23.
Brukergrensesnittet er på engelsk, og har ikke blitt oversatt til noe annet språk. Det eneste unntaket er opplæringsdelen.
Det finnes et system som kalles Emacspeak beregnet på blinde og svaksynte. Dette muliggjør bruk av Emacs gjennom bruk av lyd.

Lisens

Kildekoden som er C og Emacs Lisp, er fritt tilgjengelig for å leses, modifiseres og videreformidling. Dette gjøres under GPL-lisensen. Eldre versjoner av GNU Emacs dokumentasjon var frigitt under en ad hoc-lisens som krevde at visse deler måtte være med også i modifiserte versjoner. I GNU Emacs' brukermanual ble beskrivelsen av hvordan man kan få tak i GNU Emacs, samt Stallmans politiske essay «The GNU Manifesto» inkludert. XEmacs-manualen, som ble arvet fra eldre GNU Emacs-manualer da den ble avledet i sin tid, har samme lisens. De nyere versjonene av GNU Emacs-dokumentasjonen har tatt ibruk GFDL-lisensen og benytter seg av klausulen om invariant sections til å kreve at de samme delene tas med i avledede versjoner. I tillegg kreves det at manualene skal fortelle at de er GNU-manualer.

Bruk av Emacs

Fra et Unix-shell er det mulig å starte redigering av en fil ganske enkelt ved å skrive «emacs [filnavn]». Hvis det ikke eksisterer en fil med det navnet som er gitt, vil filen bli laget. Dette er imidlertid ikke den måten Emacs dokumentasjonen anbefale. Der anbefales det at Emacs startes uten noe filnavn. Dermed minsker risikoen for at men venner seg til å starte en ny Emacs for hver fil som redigeres. Dette vil forhindre at man drar nytte av alle fordelene med Emacs.

Minibuffer

Minibuffer er et lite område, vanligvis siste linje, som Emacs bruker til å be om informasjon. Dette kan dreie seg om tekst det skal søkes etter, filnavn og andre typer tekst. Det er mulig å få Emacs til å fylle inn deler av for eksempel et filnavn, så lenge det er unikt, ved å trykke på tabulatortasten. Slik tab completion er ofte tilgjengelig.

Filer og buffere

Emacs holder tekst i en buffer. Brukeren kan lage nye buffere og kan fjerne de som ikke lenger ønskes. Det kan være flere buffere i bruk samtidig. De fleste buffere holder tekst som kommen fra tekst filer. Disse kan endres av brukeren og lagres tilbake på enten filen den kom fra eller en ny fil. Buffere brukes også til midlertidig tekst. Dokumentasjonen til hjelpesystemet er et eksempel på slike midlertidige buffere.

Vinduer og rammer

Både når Emacs kjøres i tekstterminaler og i grafiske modus kan Emacs splitte redigering i mindre deler. Det kan være forvirrende at Emacs kaller dette vinduer, men det har programmet gjort siden 1975. Oppdelingen i Emacs-vinduer har mange funksjoner. Forskjellige deler av samme buffer kan vises, eller flere forskjellige buffere kan vises. Kildekoden som redigeres kan for eksempel vises i ett vindu, med kompilatorens feilmeldinger vises i et annet. Emacs kan også i grafisk modus operere i flere rammer, som svarer til det som idag vanligvis tenkes på som vinduer.

Emacs-lillefinger

Bruk av tastekombinasjoner med modifikatorer, ikke minst kontrolltasten kan lede til at lillefingeren blir brukt svært mye. Tunge brukere av Emacs kan få «Emacs-lillefinger» som er en belastningsskade. Dette leder til at en del emacsbrukere gjør om
caps lock tasten til kontrolltast. Det finnes også tastaturer som tillater bruk av tommelen for å bruke de vanligste modifikatortastene. Pedaler er ytterligere en mulighet for å avlaste lillefingeren.