GNU Emacs (også kalt GNUMACS og StallMACS) er en fri og åpen teksteditor som utvikles av GNU-prosjektet. Det er den mest populære utgaven av teksteditoren Emacs (Editor MACroS), og er også den utgaven som er blitt portert til flest plattformer.

GNU Emacs er plattformuavhengig, og har blitt portert til blant annet MS-DOS, Microsoft Windows, OpenVMS, Unix-liknende operativsystemer som GNU/Linux, GNU Mach/GNU Hurd, macOS, derivater av BSD, kommersielle Unix-avarter som HP-UX, SunOS, Solaris, IRIX og mobile operativsystemer for smarttelefoner og nettbrett (deriblant Android, Maemo og iOS).

Teksteditoren kan utvides ved å benytte det turingkomplette programmeringsspråket Emacs Lisp, og dens slogan er «den utvidbare og selvforklarende teksteditor». GNU Emacs har blitt kalt «den mest kraftige teksteditor som er tilgjengelig i dag», og kan vise filer med forskjellige tegnsett. Siden 1999 eller før har teksteditoren også vært istand til å vise de fleste naturlige språk.

GNU Emacs ble skapt av GNU-prosjektets grunnlegger Richard Stallman (f. 1953). Editoren har vært en sentral komponent i GNU-prosjektet, og et flaggskip for bevegelsen som promoterer fri og åpen programvare. Arbeidet med teksteditoren begynte i januar 1984. Den første versjonen fikk versjonsnummeret 13.8, og ble lansert 20. mars 1985. Siste versjon er 28.2 og ble lansert den 12. september 2022.

Historie Fra TECO og E til Emacs

Arbeidet med Emacs (Editor MACroS) startet i 1974, og den første versjonen av Emacs så dagens lys høsten 1976.Richard M. Stallman: EMACS: The Extensible, Customizable Display Editor, 1981, gjengitt på gnu.org, 11. januar 1998 Arkitekten bak Emacs var Guy Lewis Steele Jr. (f. 1954), og blant hans medarbeidere var Richard Matthew Stallman og David A. Moon. Emacs ble laget for operativsystemet Incompatible Timesharing System (ITS) mens de jobbet ved MIT Artificial Intelligence Laboratory (MIT AI Lab). Maskinvaren var 36-biter minidatamaskinen PDP-10, og Emacs var en direkte etterfølger til teksteditoren TECO.EmacsHistory, emacswiki.org, 1. mars 2019 thumb|upright|Richard M. Stallman (f. 1953) er grunnleggeren av GNU-prosjektet og opphavsmannen til GNU Emacs. thumb|right|Grensesnittet til Emacs var påvirket av designet til space-cadet tastaturet fra Symbolics. Ansatte ved Massachusetts Institute of Technology (MIT) benyttet på denne tiden space-cadet tastaturet på deres Lisp-maskiner.https://raw.githubusercontent.com/mietek/mit-cadr-system-software/master/src/lmdoc/kbdpro.3 Tastaturet inspirerte mye av sjargongen innen datidens informatikk, og grensesnittet til Emacs var påvirket av dette tastaturet.

Emacs oppstod altså i et forskermiljø som forsket på kunstig intelligens. Emacs startet som et sett med makroer til TECO, og ble i begynnelsen ikke betraktet som en ny teksteditor. Disse makroene var inspirert av teksteditoren E, som var blitt laget av Fred Wright ved Stanford Artificial Intelligence Lab ved Stanford University. Stallman var imponert av E-editorens intuitive WYSIWYG-prinsipp (What You See Is What You Get), som senere har blitt standard i de fleste moderne teksteditorer og tekstbehandlere.

Stallman besøkte Stanford AI Lab i 1972 eller 1974, og returnerte til MIT AI Lab, hvor Carl Mikkelsen hadde tilføyd en kombinert visnings- og redigeringsmodus til TECO. Ved hjelp av tastetrykkene Control-R ble skjermen oppdatert hver gang brukeren trykket på en tast. Stallman implementerte denne modusen på nytt, slik at den kjørte mer effektivt. Han tilføyde også en makro slik at brukeren kunne omdefinere et hvilket som helst tastetrykk for å kjøre i TECO.

TECO inneholdt inneholdt fasiliteter for tekstmanipulering, I/O og programmering, så nesten umiddelbart begynte mange brukere å implementere store samlinger av redigeringskommandoer, kraftfulle nok til å utføre enhver form for redigering. De mest kjente makroer var TECMAC, TMACS, MACROS, RMODE, Russ-mode og DOC.

TECO manglet fortsatt mange kontroll- og programmeringskonstruksjoner – deriblant navngitte funksjoner og variabler, som gjorde programmer mer lesbare og vedlikeholdbare. Derfor var TECO vanskelig å vedlikeholde. Dette var igjen en årsak til at Emacs ble implementert.

Utviklingen av Emacs tilføyde nye egenskaper til TECO i form av biblioteker og selv-dokumentasjon, en ny lesbar programmeringsstil og nye makroer som benyttet denne stilen. De nye makroene var inspirert av mange TECO-baserte editorer, og makroene ble også skapt slik at de mest anvendte operasjoner krevde færrest tastetrykk.

Etter lanseringen av Emacs som en egen editor, ble TECO videreutviklet på basis av det arbeid Stallman og hans medarbeidere hadde gjort. Nye egenskaper ble tilføyd TECO, for å øke hastigheten på løkker i tabellsøking og S-uttrykk parsing eller for å muliggjøre nye former for I/O eller grensesnittoperasjoner.

TECO ble senere portert til MS-DOS, Windows 95, Windows 98, Windows NT 3.1/3.5/3.51/4.0, Windows 2000, Windows XP, OS/2, GNU/Linux og OpenBSD.Text Editor and COrector, almy.us/teco.html, mai 2017

I 1977 hadde interessen for Emacs vokst så mye at Mike McMahon ved SRI International adopterte editoren til DECs operativsystem TOPS-20 (etterfølgeren til TENEX). I 1981 var Emacs i bruk på omkring hundre steder.

Fra Gosling Emacs til GNU Emacs thumb|Redigering av flere Dired-buffere med brukerdefinerte farger i GNU Emacs. thumb|Redigering av kildekode i programmeringsspråket C in GNU Emacs thumb|Redigering og kompilering av C++-kode fra GNU Emacs thumb|Avlusing av et PHP-skript under GNU Emacs thumb|GNU Emacs 23.1.1 som kjører på GNU/Linux. thumb|Skjermskudd av GNU Emacs 23.1.1. I januar 1984 begynte Stallman å arbeide med et fritt alternativ til den proprietære teksteditoren Gosling Emacs. Sistnevnte ble laget i 1981 av James Gosling (f. 1955) i programmeringsspråket C. I begynnelsen ble Gosling Emacs distribuert uten formelle restriksjoner. I 1980 vedtok imidlertid kongressen i USA å innføre patentrettigheter på programvare, og da Gosling Emacs den 6. mai 1983 ble solgt til UniPress opphørte den frie distribusjonen av programvaren.Jamie Zawinski: Emacs Timeline, wikiwix.com, 8. mars 1999, oppdatert 29.oktober 2007

Dette var igjen foranledningen til den første formelle lisensen for Emacs, som 25. februar 1989 ble til GNU General Public License (GPL). Versjon 13.8 var den første offisielle utgaven av GNU Emacs, og det første programmet som ble utgitt av det nydannede GNU-prosjektet. Den ble lansert den 20. mars 1985. Versjon 15.34 ble utgitt 7. mai 1985, og var den første versjonen med større utbredelse.

De første versjonene av GNU Emacs benyttet kommandotolken Mocklisp fra Gosling Emacs. Den 15. juli 1985 ble versjon 16.56 av GNU Emacs lansert. Der var Mocklisp erstattet av en ekte LISP-kommandotolk, og dette gjorde at nesten hele koden ble omskrevet.

GNU Emacs er skrevet i programmeringsspråket C og tilbyr Emacs Lisp (som også er implementert i C) som et utvidende programmeringsspråk.

Utviklingen videre Da versjon 16.60 ble lansert den 19. september 1985, ble GNU Emacs portert til Unix System V.

Versjonen tilbød flere egenskaper enn Gosling Emacs, spesielt med Lisp som sitt utvidelsesspråk, og ganske snart erstattet den Gosling Emacs som en de facto Emacs-editor på Unix. I versjon 17.36 som ble lansert 20. desember 1985, hadde brukermanualene støtte for det typografiske systemet TEX.

Versjon 18.24 ble lansert 2. oktober 1986, og var en betaversjon og ikke offisiell versjon. Den innførte mange nyheter. Kommandoen emacs -nw innførte støtte for konsollapplikasjoner i xterm. GNU Emacs ble i stand til å åpne TCP/IP, og innførte en servermodus. Kommandoen M-x disassemble ble også innført.

Hackeren Markus Hess, som spionerte for KGB, utnyttet en sikkerhetsfeil i E-post-subsystemet til GNU Emacs i 1986. Dette ga han urettmessig tilgang som superbruker i Unix-datamaskiner som var tilknyttet USAs forsvar via ARPANET og MILNET.

Richard Stallman har flere ganger markert seg som en motstander av overvåkning, utført av regjeringer og kommersielle korporasjoner.Facebook is surveillance monster feeding on our personal data, Richard Stallman, Russia Today Youtube Channel. I henholdsvis 2013 og 2014 ga han uttrykk for støtte til whistleblowere som Julian Assange (f. 1971) og Edward Snowden (f. 1983).

Versjon 18.52 av GNU Emacs, som ble lansert 17. august 1988, innførte , et bibliotek som tilføyde enkelte «distraher NSA» nøkkelord (UNCPCJ Emergency management JITEM PEM bullion MSCJ Airplane SLIP rogue Gatt Ammonium nitrate Trafficking embassy Emergency TELINT) for hver melding man sendte over datanett.

Versjon 19.28 ble lansert 1. november 1994 og innførte støtte for flere rammer under vindussystemet X. VC (et nytt grensesnitt for versjonskontroll) ble innført, og det ble også innført font-lock modus og hexl-modus for heksadesimal redigering.

Versjon 19.30 ble lansert 24. november 1995. Blant nyhetene var støtte for flere rammer på Microsoft Windows, menylinjen tilgjengelig på tekstbaserte dataterminaler, pakken emulerer vanlige tastaturkombinasjoner på Microsoft Windows og Macintosh.

Versjon 19.31 ble lansert 25. mai 1996. I denne versjonen kunne GNU Emacs åpne rammer i vindussystemet X som standard, det ble støtte for rullefelt i Windows 95 og Windows NT, og støtte for underprosesser i Windows 95. Kommandoen kunne gjenopprette multiple datafiler etter datahavarier, og noen av egenskapene i doctor.el ble fjernet for å tilpasse seg Communications Decency Act i USA (lovgivning mot pornografi).

Versjon 20.1 ble lansert 17. september 1997 og innførte støtte for mange naturlige språk.

Versjon 21.1 ble lansert 20. oktober 2001. Blant nyhetene var støtte for fargevisning og andre egenskaper på dataterminaler, innebygd horisontal rulling, støtte for lyd, støtte for datamus med hjul, forbedret utseende av menylinjen, støtte for bilder, verktøyslinje og tooltip. Denne versjonen hadde støtte for Unicode.

Versjon 22.1 ble lansert 2. juni 2007. Blant nyhetene var støtte for widget verktøyet GTK+, støtte for dra og slipp på vindussystemet X, og støtte for programmeringsgrensesnittet Carbon i Mac OS X (bakoverkompatibilitet med Mac OS 8 og Mac OS 9). org-mode versjon 4.67d ble også innlemmet.

Versjon 22.2 ble lansert 26. mars 2008. Blant nyhetene var ny støtte for versjonskontrollsystemene GNU Bazaar, Mercurial, Monotone og Git. Nye store modi var å redigere datafiler for CSS, OpenVera, Verilog og . Denne versjonen hadde også forbedret støtte for rulling i bildemodus.

Versjon 22.3 ble lansert 5. september 2008. Blant nyhetene var bedre støtte for GTK+, datamus, Unicode, og dra og slipp under vindussystemet X. Det ble innført et nytt system for tastaturmakroer. Mange nye modi og pakker ble innført, deriblant et grafisk brukergrensesnitt til GNU Debugger, Python-modus, det matematiske verktøyet Calc, og systemet Tramp (Transparent Remote (file) Access, Multiple Protocol) for redigering av fjerne filer.

Versjon 23.1 ble lansert 29. juli 2009. Blant nyhetene var bedre støtte for kantutjevnende fonter i vindussystemet X gjennom Xft, bedre støtte for Unicode, Doc-view modus og nye pakker for å vise filer i formatene PDF og PostScript, forbindelse til prosesser gjennom D-Bus (dbus), forbindelse til GNU Privacy Guard (EasyPG), nXML-modus for å redigere XML-dokumenter, Ruby-modus for redigering av programmer i programmeringsspråket Ruby. Bruken av Carbon i Mac OS X, ble erstattet av det mer moderne grensesnittet Cocoa.

Versjon 23.2 ble lansert 8. mai 2010. Blant nyhetene var nye verktøy for å bruke GNU Emacs som et integrert utviklingsmiljø, deriblant navigasjon over et prosjekt og automatisk generering av makefiler. Nye større modi for å redigere kildekode i JavaScript. I grafiske brukergrensesnitt, blir markøren skjult mens brukeren skriver.

Versjon 23.3 ble lansert 10. mars 2011, og inneholdt forbedret funksjonalitet for å bruke GNU Emacs i versjonskontrollsystemer.

Versjon 23.4 ble lansert 29. januar 2012, og fikset en sikkerhetsfeil.