Emacs

Emacs er fellesnavnet for en gruppe tekstredigeringsprogrammer hvor GNU Emacs og XEmacs er de mest brukte. Emacs blir av mange verdsatt for sine gode utvidelsesmuligheter.  Den er beregnet først og fremst på å redigere innhold, ikke til å endre skrifttyper og utseende slik GUI-baserte kontorverktøy i dag gjerne er. Emacs har et stort utvalg av funksjoner, og et viktig kjennetegn ved Emacs er mulighetene til å tilpasse programmet til nye situasjoner. Dette kan brukeren selv gjøre, men vanligvis gjøres det ved at ferdige utvidelser lastes inn.

Mange versjoner av Emacs har eksistert gjennom tidene, men idag er det to som er i alminnelig bruk: GNU Emacs som ble startet i 1984 av Richard Stallman og som fremdeles vedlikeholdes av ham, og XEmacs som i 1991 startet som en forgrening av GNU Emacs. De to er fortsatt i stor grad kompatible. Begge benytter seg av programmeringsspråket Emacs Lisp som utvidelsesspråk. Dette har gitt dem mulighet til å utføre oppgaver fra tekstredigerer til kompilator eller nettleser.

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 standard-editoren 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.

TECO-utvidelser
Den nye versjonen av TECO ble raskt populær på AI-laboratoriet. Det ble snart utviklet en hel rekke makroer med navn som sluttet på MAC eller MACS for å indikere at det var makroer. To år senere tok Guy Steele fatt på å forene disse makroene til én enhet. Etter en natts felles programmering ved Steele og Stallman fullførte sistnevnte implementasjonen som inkluderte egenskaper for å utvide og dokumentere den nye samlingen av kommandoer. Resultatet ble kalt EMACS som stod for Editing MACroS. Ifølge Stallman valgte han navnet «fordi <E> ikke var i bruk som en forkortelse på ITS på den tiden».

Stallman forstod faren for at tilpasning kunne lede til dialekter og forking. Han satte derfor visse betingelser for bruken. Han skrev senere:
«EMACS ble distribuert på basis av felles deling, hvilket betød at alle forbedringer måtte gis tilbake til meg for å legges til og distribueres.»

Flere varianter
Den originale Emacs kjørte, i likhet med TECO, bare på PDP-10. Mange Emacs-aktige 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-implementasjon. 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.

Varianter for små maskiner
GNU Emacs ble utviklet med tanke på maskiner med minst en megabyte RAM. Dette var store maskiner på den tiden, og det gjorde at det var en åpning for løsninger for mindre maskiner. Her er noen eksempler:

 MicroEMACS – En portabel implementasjon som opprinnelig ble skrevet av Dave Conroy og videreutviklet av Daniel Lawrence. Den finnes i flere varianter, og ble i sin tid brukt av Linus Torvalds.
 MG – Opprinnelig kalt MicroGNUEmacs. Den var en variant av MicroEMACS som ble laget for å ligne på GNU Emacs. Den finnes nå som standard på OpenBSD.
 JOVE (Jonathan's Own Version of Emacs) – En ikke-programerbar implementasjon for Unix-lignende systemer. Den ble skrevet av Jonathan Payne.
 Freemacs – En versjon for DOS med et stackbasert utvidelsesspråk. Det hele innen den originale 64 kilobyte minnegrensen.

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 Lisp-funksjon. Lisp-miljø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.

Biblioteker

Emacs inneholder et stort antall biblioteker, og det er mulig å finne enda flere ved søk på Internet. Svært mange av disse bibliotekene implementerer hjelpemidler for utvikling av programmer. Det er mulig å benytte Emacs som et integrert utviklingsmiljø hvor redigering, kompilering og debugging utføres med Emacs som brukergrensesnitt. Andre bibliotek finnes for mer uvanlige oppgaver. En kort liste med eksempler følger:

Calc – et alternativ til en lommeregner.
Calendar-mode – en bordkalender.
Doctor – en implementasjon av ELIZA som oppfører seg som en psykoterapeut.
Dunnet – et tekst opplevelsesspill.
Ediff – for å sammenligne tekstfiler.
Emerge – for å sammenligne tekstfiler og kombinere dem.
Emacs/W3 – en webleser.
ERC – en IRC klient.
Gnus – en newsreader og email klient.
MULE – en utvidelse for å tilpasse Emacs til språk hvor for eksempel tegnsett er spesielt.
Info – en leser for hjelpetekster
Emacs-wiki – LISP-basert wiki for Emacs
Tetris

Minneforbruk
Ulempen med at Emacs er basert på en interpretert Lisp er at det koster ressurser å 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.

Fra GNU Emacs 28 kan man kompilere Emacs Lisp-kode til maskinkode.

Tilgjengelighet

Plattformer
Emacs er et av de ikke-trivielle 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å Unix-lignende operativsystemer bruker Emacs vindussystemet X som grunnlag for sitt 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, verktøylinje 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 et 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 (customize), 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 tastatursnarveier til noe annet enn det som er 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 av 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 mediawiki-el. 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.

Dokumentasjon

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, Python 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.

Manual
I tillegg til den innebyggede dokumentasjonen har Emacs en usedvanlig lang og velskrevet manual. En elektronisk kopi av GNU Emacs Manual som er skrevet av Richard Stallman, følger med GNU Emacs og kan leses med den innebyggede Info browseren. XEmacs har en tilsvarende manual. Den er en avledning av GNU Emacs manualen fra samme tid som XEmacs programmet.

To andre manualer
 Emacs Lisp Reference Manual av Bill Lewis, Richard Stallman og Dan Laliberte
 Programming in Emacs Lisp av Robert Chassell følger også med. Ved siden av den elektroniske versjonen er alle tre manualene tilgjengelige som bøker utgitt av Free Software Foundation.

Emacs har også en innebygget opplæringspakke. Når Emacs startes uten noen fil forteller den hvordan enkle redigeringer kan foretas, og hvordan opplæringsprogrammet kan startes.

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 anbefaler. Der anbefales det at Emacs startes uten noe filnavn. Dermed minsker risikoen for at man venner seg til å starte en ny Emacs for hver fil som redigeres. Dette vil forhindre at man drar nytte av alle fordelene med Emacs.

Kommandoer
I normal redigeringsmodus oppfører Emacs seg som andre redigeringsprogrammer: tastene for de forskjellige tegnene  (a, b, c, 1, 2, 3, osv.) vil legge vedkommende tegn inn i dokumentet, piltastene vil flytte redigeringspunktet, slettetaster vil fjerne tegn osv. Bak kulissene er imidlertid også noe så enkelt som a egentlig kommandoer som utfører en Emacs Lisp-kommando. I dette tilfelle er funksjonen som kalles self-insert-command. Mer kompliserte kommandoer er vanligvis knyttet til en sekvens av tegn da som regel med en eller flere modifikatortaster i tillegg. Kontrolltasten er en slik modifikatortast, alttasten er en annen. Disse trykkes ned samtidig med en vanlig tast.

Noen av disse kommandoene er vist i tabellen under. På standard Emacs vis står C for kontrolltasten og M for meta- eller alttasten. Taster som skal trykkes inn samtidig er sammenbundet med -.

Legg merke til at kommandoene save-buffer og save-buffers-kill-emacs bruker flere modifiserte tastetrykk. For eksempel betyr C-x C-c at kontroll-x skal trykkes først, så kontroll-c. Denne teknikken som tillater flere kommandoer å bli bundet til tastaturet enn enkle tastetrykk kunne gitt, fikk Emacs fra TECMAC, en av TECO-samlingene som fantes i tiden før Emacs oppstod. Emacs gjorde den utbredt, og nå er metoden brukt av flere.

Når Emacs kjører i et grafisk miljø kan mange av kommandoene gis også ved hjelp av mus. Det finnes nedtrekksmenyer og en verktøylinje med ikoner. Mus kan også brukes til å fremskaffe en popup-meny. Mange erfarne Emacs-brukere foretrekker å bruke tastaturet fordi det er raskere og enklere når de nødvendige kombinasjonene er innlært.

Noen Emacs-kommandoer innebærer at et eksternt program kjøres for å utføre en oppgave. Et eksempel er ispell, som brukes for stavekontroll, enten gjennom en egen kommando, eller gjennom den underordnede modusen flyspell som sjekker underveis.

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.

Referanser

Eksterne lenker
 
  Emacs brukerwiki
  Emacs Forum hos  Nabble som arkiverer Emacs mailing lister i et søkbart forum.
  Multics Emacs: The History, Design and Implementation
  Liste over Emacs implementsjoner
  The Craft of Text Editing or Emacs for the Modern World
  En Emacs tidslinje
  Humor basert på navnet til Emacs

 
Programvare fra 1976