Emacs er fellesnavnet for en gruppe tekstredigeringsprogrammer hvor GNU Emacs er det mest brukte. Emacs blir av mange verdsatt for sine gode utvidelsesmuligheter. 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 bare GNU Emacs som er i alminnelig bruk. GNU Emacs ble startet i 1984 av Richard Stallman og vedlikeholdes i dag av Emacs brukerfellesskapet.
Emacs er ikke bare et tekstredigeringsprogram, men også en Emacs Lisp tolker. (Emacs Lisp, også kalt Elisp, er en dialekt av programmeringsspråket Lisp.) Dette innebærer at Emacs, bortsett fra en liten kjerne i C, er skrevet i det samme språket man bruker for å konfigurere den og utvide den. Man kan lett forandre hvordan nesten alt virker i Emacs ved hjelp av Emacs Lisp.
Denne fleksibiliteten er ikke tilfeldig siden GNU Emacs også er det første programmet laget av GNU-prosjektet og dermed det første fri programvare-programmet. Friheten ligger ikke bare i lisensen og tilgjengeligheten av kildekode, men også i brukerens frihet til å utvide programmet og bruke det som man vil. All koden er i programmet er godt dokumentert både i selve koden og med info manualer og hjelpefunksjoner og dette gjør det lett å lære Emacs Lisp. På grunn av denne fleksibiliteten blir Emacs i dag ofte brukt til mye mer enn bare tekstredigering, f.eks. som epostklient, RSS og Usenet News-leser, nettleser, git client, prosjektplanlegger, kalender, musikkspiller osv.
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 thumb|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 var sammen med GNU Emacs en av de to dominerende variantene til begynnelsen på 2000-tallet da utviklingen av XEmacs stoppet opp.
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. Den kommer også som en av standard systemverktøyene på GNU Guix. 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. Emacs er et kraftig og fleksibel tekstredigeringsverktøy. Den er beregnet først og fremst på å redigere innholdet, ikke til å endre skrifttyper og utseende slik GUI-baserte kontorverktøy idag gjerne er. De fleste brukere bruker Emacs i GUI-versjon, men man kan også kjøre den i en terminal eller en grafisk terminalemulator.
Emacs tilbyr en rekke funksjoner til å redigere tekst. Funksjonene varierer fra kommandoer som manipulerer ord, og paragrafern 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 at nesten enhver funksjon helt ned til det å legge inn et enkelt tegn inn i dokumentet er kontrollert av en Lisp-funksjon. Emacs Lisp gjør det mulig å endre variabler eller metoder underveis i redigeringen uten at Emacs må rekompileres eller restartes. Dette kan brukeren selv gjøre eller man kan bruke ferdige pakker som andre har laget. Emacs kommer med en innebygget pakkehåndterer og pakkebrønnene GNU Elpa og Non-GNU Elpa er tilgjengelige uten ekstra konfigurasjon. Mange legger også til pakkebrønnen MELPA.
Biblioteker thumb|XEmacs i bruk som klient for email med VM-biblioteket 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 og nyere versjoner av Emacs har innebygget kompilering av Emacs Lisp på forhånd for alle installerte pakker slik at denne ulempen til en stor grad forsvinner. 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.