GNU Emacs

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

Ansatte ved Massachusetts Institute of Technology (MIT) benyttet på denne tiden space-cadet tastaturet på deres Lisp-maskiner. 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 også 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.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 ===

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.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 var likevel viktig, fordi 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.Den beryktede 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 ved flere anledninger markert seg som en motstander av overvåkning, utført av regjeringer og kommersielle korporasjoner. 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 spook.el, 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 pc-select 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 recover-session 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 
  
    
      
        
          
            B
            
              
                
                  I
                  B
                
              
            
            
            T
            
              
              
                
                  E
                
              
            
            
            X
          
        
      
    
    {\displaystyle {\mathrm {B{\scriptstyle {IB}}\!T\!_{\displaystyle E}\!X} }}
  . 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.Versjon 24.1 ble lansert 10. juni 2012. Blant nyhetene var Emacs Lisp Package Archive (ELPA), støtte for nye fargetemaer, GTK+3 som opsjon, støtte for toveis innmatning, støtte for leksikalsk prosjektramme i Emacs Lisp.Versjon 24.3 ble lansert 10. mars 2013. I denne versjoner ble generaliserte variabler en del av kjernen i Emacs Lisp, en oppdatinger for emuleringsbiblioteket Common Lisp, og en ny stor modus Python.Versjon 24.4 ble lansert 20. oktober 2014. Denne versjonen fikk støtte for aksesskontrollister og digitale signaturer i Emacs Lisp-pakker. Andre nyheter var forbedret støtte for fullskjerm og flere skjermer, støtte for å lagre og gjenopprette tilstanden til rammer og vinduer, forbedret menystøtte på tekstbaserte dataterminaler, enda en innebygd nettleser (M-x eww), en ny modus for rektangulær merking (C-x SPC) og støtte for datafilvarsling.Versjon 25.1 ble lansert 17. september 2016. Denne versjonen fikk støtte for lasting av delte og dynamisk lenkede biblioteker, validering av TLS/SSL-sertifikater, en ny mindre modus electric-quote-mode for å bruke buede sitater, støtte for tegnbretting i isearch.el, støtte for innbakte widgeter i Emacs-buffere og nye og forbedrede fasiliteter for å innsetting av Unicode-tegn.Versjon 26.1 ble lansert 28. mai 2018. Denne versjonen innførte begrenset form for parallellprosessering med Lisp-tråder, støtte for visning av linjenummer i bufferet, og dobbel buffering for å redusere flimmer i vindussystemet X. Programmet Flymake var blitt fullstendig omskrevet, og TRAMP fikk en ny forbindelsesmetode for Google Drive. Det var kommet en ny horisontal rullemetode for enkeltlinje-modus. En brukerfil for systemd var inkludert, og det var blitt støtte for 24-biters farger på dataterminaler.Versjon 26.2 ble lansert 12. april 2019. Emacs-moduler kunne nå bygges på utsiden av kilde-treet til GNU Emacs, og det var blitt støtte for Unicode versjon 11.0. Versjon 26.3 ble lansert 28. august 2019. Denne versjonen innførte en ny GPG-nøkkel for signatursjekking for GNU ELPA (Emacs Lisp Package Archive).
Versjon 27.1 ble lansert 10. august 2020. Blant nyhetene var innebygd støtte for heltall av arbitrær størrelse, tekstforming med HarfBuzz, støtte for JSON-parsing, og bedre støtte for tegning av fonten Cairo (fra Macintosh). Portabel dumping benyttes i stedet for unexec, og det ble støtte for XDG-konvensjoner for initfiler. Denne versjonen tilføyde en tidlig-init initialiseringsfil. Leksikalsk binding er blitt standard, og det var nå innebygd støtte for fanefelt og fanelinje. Denne versjonen ga støtte for endring av størrelsen på og rotering av bilder uten ImageMagick.
Versjon 27.2 ble lansert 25. mars 2021 og inneholdt en del feilrettinger.
Versjon 28.1 ble lansert 4. april 2022. Blant nyhetene var native kompilering av Lisp-filer, tekstforming med HarfBuzz og tegning med Cairo, støtte for loading Secure Computing filtre, forbedret visning av Emoji og Emojisekvenser, mode-spesifikke kommandoer og vising av matchende parenteser som standard.
Verson 28.2 ble lansert 12. september 2022 og inneholdt en del feilrettinger.
Selv om brukere vanligvis sendte oppdateringer og kode i Emacs Lisp til diskusjonsgruppen net.emacs (omdøpt til com.emacs 27. januar 1987), var deltagelsen i utviklingen av GNU Emacs relativt begrenset inntil 1999. Dette ble i oktober 1999 brukt som eksempel på en «katedral-utvikling» i boken The Cathedral and the Bazaar av Eric Steven Raymond (f. 1957). Prosjektet har senere adoptert en alment tilgjengelig e-postliste for utvikling og en anonym tilgang til Concurrent Versions System (CVS). Utviklingen fant sted i en enkel CVS-stamme frem til 26. mars 2008, da det tok i bruk distribuert versjonskontroll i versjonskontrollsystemet Git.Richard Stallman er fortsatt den grunnleggende vedlikeholder av GNU Emacs, men han har trådt tilbake fra denne rollen til tider. Stefan Monnier og Chong Yidong har hatt ansvar for vedlikeholdet siden 2008. Den 21. september 2015 kunngjorde Monnier at han ville trekke seg tilbake som når egenskapene til Emacs 25 var frosset. Den langvarige bidragsyter John Wiegley ble ny vedlikeholder den 5. november 2015.


=== Norske bidrag ===
Den norske programmereren Erik Naggum (1965–2009) var en bidragsyter til GNU Emacs i nesten et tiår. Han bidro til mange patcher til GNU Emacs fra versjon 19.26 (lansert 7. juli 1994) til versjon 20.4 (lansert 12. juli 1999). Erik Naggum var en forsvarer av ANSI-standarden Common Lisp, og prøvde å utvikle Emacs Lisp i retning av Common Lisp. I denne forbindelse var han forfatteren av hyperspec.el (Common Lisp Hyperspec), et HTML-dokument som ga en gjengivelse av spesifikasjonen til Common Lisp. Like etter årtusenskiftet syslet han med planene om å lage en Common Lisp Emacs som skulle erstatte Emacs Lisp, noe som fremgår av diskusjoner på diskusjonsgruppen comp.lang.lisp. I sitt innlegg Re: RFC: Lisp/Scheme with less parentheses through Python-like significant indentation? skrev han på comp.lang.lisp den 11. august 2000: «"De som ikke kjenner til Lisp er dømt til å finne det opp på nytt", er en Emacs-innstilling. Dette er et Lisp-miljø, så jeg burde kanskje si: "De som ikke kjenner til Emacs er dømt til å oppfinne det på nytt."»En annen ting som opptok Naggum var overgangen fra ASCII til flere tegnsett. ASCII er en 7-biters kode med 128 mulige tegn. I oktober 1991 ble første versjon av Unicode lansert, som støttet 7,129 tegn. I versjon 15.0, som ble lansert i september 2022, hadde dette vokst til 161,149 tegn, som innbefattet 186 moderne og historiske skriftsystemer. UCS-2 som er en implementasjon av Unicode, bruker 16 biter til å fremstille tegn, og det arbeides også med UTF-32, som bruker 32 biter.
Emacs var tidlig ute med støtte for flere tegnsett, faktisk forut for Unicode. Implementasjonen i Emacs kalles MULtilingual Enhancement (MULE), og støtter minst 42 tegnsett, 53 kodesett, 128 innmatingsmetoder og 58 språk. Implementasjonen i Emacs er på mange måter mer avansert enn Unicode, og gjør det mulig å ha flerspråklige tekster i ulike språk i et og samme buffer. MULE ble opprinnelig lansert på Nemacs, en japansk versjon av Emacs som ble lansert i 1987. Det ble deretter implementert i XEmacs og i versjon 20.1 av GNU Emacs den 17. september 1997.
Erik Naggum arbeidet på støtten for flere tegnsett i Emacs i flere år. Han sluttet etter introduksjonen av MULE, på grunn av de «semantiske kollisjoner» dette medførte i versjonskontrollsystemet CVS. I denne forbindelse laget han et «multi-byte survival kit» for brukere av Emacs 20 som ønsket å bevare adferden til tegnsettet i Emacs 19. Programvareselskapet Red Hat inkluderte dette programvareverktøyet i Red Hat Linux 5.0 «Hurricane» den 1. desember 1997.


=== Versjonsnummereringen ===
Tidligere versjoner av GNU Emacs var nummererte «1.x.x», der første siffer betegner versjonen av GNU C. Tallet «1» ble sløyfet etter versjon 1.12 fordi man trodde at det store versjonsnummeret aldri ville forandres. Et nytt tredje versjonsnummer ble tilføyd for å representere mindre forandringer som var gjort av brukersider. Versjon 20.0 var f.eks. en ny versjon, mens versjon 20.0.1 hadde endringer som var foretatt av andre brukere. I den nåværende nummereringsmodellen, brukes et tall med to komponenter for å angi en lansert versjon (f.eks. 22.1), mens utviklingsversjoner har tre komponenter. Versjon 23.0.50 var f.eks. en utviklingsversjon som til slutt ble til versjon 23.1.


== Lisensiering ==
Vilkårene i GNU General Public License (GPL) sier at kildekoden til Emacs, inkludert både C- og Emacs Lisp-komponentene, er fritt tilgjengelig for undersøkelse, modifisering og redistribusjon.

Eldre versjoner av dokumentasjonen til GNU Emacs hadde en ad-hoc-lisens som krevde inkludering av bestemt tekst i enhver modifisert kopi. I GNU Emacs-brukerhåndboken inkluderte dette for eksempel instruksjoner for å skaffe seg GNU Emacs og Richard Stallman's essay GNU Manifesto. XEmacs-manualene har samme lisens. Nyere versjoner av dokumentasjonen bruker GNU Free Documentation License med «uforanderlige seksjoner» som krever at de samme dokumentene inkluderes og at manualene proklamerer at de er GNU-manualer.
Signifikante kodebidrag aksepteres bare hvis opphavsmannen avsier seg rettighetene til koden og sjenker den til Free Software Foundation. Feilrettinger og mindre kodebidrag på færre enn 10 linjer er unntatt fra regelen. Dette er for at FSF kan forsvare programvaren i retten dersom dens copyleft-lisens er krenket.
Den 29. juli 2011 kom det frem at GNU Emacs med uhell hadde utgitt enkelte binærfiler uten samsvarende kildekode i to år, i strid med ånden til GPL. Richard Stallman beskrev dette som «en svært alvorlig feiltagelse», og feilen ble rettet øyeblikkelig. FSF saksøkte ingen distributører som uvitende hadde krenket GPL ved å distribuere disse filene.


== Bruken av Emacs ==


=== Kommandoer ===

I vanlig redigeringsmodus oppfører GNU Emacs seg som andre teksteditorer. Man setter inn tegn med tilhørende taster og flytter redigeringspunktet med piltastene. Brukeren trykker på modifiseringstaster, sammen med vanlige taster for å påkalle funksjoner fra Emacs Lisp. Modifiseringstastene som brukes er:
Escape
Control (Ctrl) og/eller Meta (på enkelte tastaturer)
Alt eller Super (på noen tastaturer)Nedenfor har vi vist en del vanlige kommandoer. Mange av disse kombinerer flere modifiseringsnøkler.


==== Starte og lukke GNU Emacs ====
emacs. Denne kommandoen starter GNU Emacs i Unix-liknende operativsystemer. I Microsoft Windows og Mac OS startes programmet ved å taste på dets ikon.
C-x C-c eller save-buffers-kill-emacs lagrer alle buffere og avslutter GNU Emacs.
C-x C-z eller suspend-emacs, suspenderer GNU Emacs i Unix-terminologien (stanser programmet og plasserer det i bakgrunnen). Hvordan programmet restartes avhenger av skallet (mest sannsynlig via kommandoen fg)


==== Modifisering av datafiler ====

C-x C-f eller find-file. Denne kommandoen leser en datafil inn i et buffer for redigering. Når du utfører denne kommandoen, vil GNU Emacs be deg om navnet på datafilen. Deretter sjekkes det om du allerede redigerer denne datafilen i et buffer; dersom du gjør det svitsjer den til dette bufferet og leser ikke datafilen igjen. Dersom du ikke gjør det, skapes et nytt buffer, som er oppkalt etter datafilen, og initialisert med en kopi av filen. I begge tilfeller svitsjer vinduet til å vise dette bufferet.
C-x C-s eller save-buffer lagrer en datafil ved å skrive en kopi av bufferet til harddisken, og overskrive bufferets fil, samtidig som den håndterer sikkerhetskopier.
C-x s eller save-some-buffers. Denne kommandoen lagrer alle buffere som besøker datafiler, med spørsmål og opsjoner for hver enkelt.


==== Manipulering av databuffere ====

Følgende kommandoer brukes til å manipulere datafiler:
C-x b eller switch-to-buffer. Ber om et buffernavn og bytter til bufferets nåværende vindu. Vinduskonfigurasjonen endres ikke. Denne kommandoen skaper også et nytt vindu hvis du skriver et nytt navn; det nye bufferet vil ikke besøke noen datafil
C-x C-b eller list-buffers. Åpner et nytt vindu med liste over alle buffere, viser hvorvidt de er modifisert, viser også deres størrelse i bytes, deres store modus og datafilen som bufferet besøker
C-x k eller kill-buffer. Ber om et buffernavn og fjerner hele datastrukturen for dette bufferet fra GNU Emacs. Hvis bufferet er modifisert, vil du få mulighet til å lagre det (dette fjerner ikke den assosierte datafilen).
C-x C-q eller vc-toggle-read-only. Skrivebeskytter et buffer slik at dets innhold bare kan leses, eller gjør det skrivbart hvis det er skrivebeskyttet. Hvis filene er under versjonskontroll, vil kommandoen også sjekke filene for deg.


==== Manipulering av vinduer ====
C-v eller scroll-up. Kommando som ruller fremover en skjerm av gangen.
M-v eller scroll-down. Kommando som ruller bakover en skjerm av gangen.
C-x o eller other-window. Svitsjer til et annet vindu og gjør det aktivt. Gjentatte bruk av denne kommandoen beveger seg gjennom alle vinduer, fra venstre til høyre og fra toppen til bunnen, og sirkulerer deretter gjennom alle igjen.
C-x 1 eller delete-other-windows. Lukk alle andre vinduer enn det som er aktivt. Kommandoen sletter ikke bufferene eller datafilene som er assosiert med vinduene.
C-x 0 eller delete-window. Sletter det nærværende vindu, og endrer størrelsen på de andre.
C-x 2 eller split-window-vertically. Deler et vindu i to, vertikalt. Det skaper et nytt vindu, men ikke et nytt buffer, for det samme buffer vil nå vises i to vinduer. Slik kan man se to deler av samme buffer samtidig.
C-x 3 eller split-window-horizontally. Deler et vindu i to, horisontalt.
C-M-v eller scroll-other-window. Liksom C-v, men ruller fremover til neste vindu. Hvis det er mer enn to vinduer, vil neste vindu være det som C-x o svitsjer til.


==== Hjelpefunksjoner ====
C-h a eller command-apropos. Ber om et nøkkelord og lister deretter alle kommandoer med dette nøkkelordet i lange navn.
C-h k eller describe-key. Ber om en tast og beskriver kommandoer knyttet til denne tasten.
C-h i eller info. Ber om hypertekst-dokumentleseren Info.
C-h m eller describe-mode. Beskriver den gjeldende store modus og dens spesielle bindinger til taster.
C-h p eller finder-by-keyword. Kjører en interaktiv emneorientert leser av Emacs-pakker
C-h t eller help-with-tutorial. Kjører en opplæring i GNU Emacs.


==== Modifisering av eksterne programmer ====

Enkelte kommandoer påkaller et eksternt program, slik som ispell for stavekontroll eller GNU Compiler Collection (gcc) for kompilering, parsing og visning av resultatet i GNU Emacs. Emacs støtter også «underordnede prosesser» — langvarige prosesser som samspiller med et Emacs-buffer. Dette brukes for å implementere shell-mode, hvor Unix-skallet er en underordnet prosess. Det brukes også i moduser med read–eval–print løkker (REPL) for ulike programmeringsspråk. Støtten for eksterne prosesser, gjør GNU Emacs attraktiv for interaktiv programmering i tråd med prinsippene i Interlisp eller Smalltalk.De som foretrekker taster som er i stil med IBM Common User Access kan bruke cua-mode. Dette var opprinnelig en tredjeparts tilføyelse, og ble inkludert i GNU Emacs i versjon 22.1 i 2007.


=== Minibuffer ===

Emacs benytter et «minibuffer», vanligvis linjen i bunnen, til å presentere status- og kommandoinformasjon. Dette er funksjoner som vanligvis utføres av dialogbokser i de fleste grafiske brukergrensesnitt. Minibufferet holder informasjon slik som filnavn når man søker etter navnet på en datafil som skal leses eller skrives. Kommandolinjeavslutning er tilgjengelig ved å trykke Alt eller tabulatoren.


=== Filhåndtering og visning ===
GNU Emacs holder tekst i datastrukturer kjent som databuffere. Slike buffere kan vises på skjermen, og egenskapene til bufferene er både tilgjengelig for et program skrevet i Emacs Lisp og for brukergrensesnittet. Brukeren kan skape nye buffere, og forkaste uønskede, og mange buffere kan eksistere samtidig. Det er ingen øvre grense på antall buffere, bortsett fra grensen i datamaskinens minne. Avanserte brukere kan samle hundrevis av åpne buffere av forskjellige typer mens de arbeider. GNU Emacs kan konfigureres til å lagre listen av åpne buffere når programmet avsluttes, og gjenåpne denne listen når det startes på nytt.Enkelte buffere inneholder tekst som er lastet fra tekstfiler, som brukeren kan redigere og lagre permanent. Slike buffere kalles «besøkende datafiler». Buffere kan også vise andre data, slik som utmatningen av Emacs-kommandoer, kataloglistinger ved hjelp av dired, tekststrenger med dokumentasjon fra biblioteket «hjelp» og meldinger og beskjeder som andre teksteditorer viser i en dialogboks. Noen av disse meldinger vises kort i minibufferet, og GNU Emacs har et eget buffer (*Messages*) som holder historien om de mest nylige meldinger av denne type. Når minibufferet brukes for utmatninger av GNU Emacs, kalles det «ekko-området». Lengre meldinger vises i egne buffere. Den maksimale lengden på meldinger som viser i minibufferet er konfigurerbart.
Buffere kan tjene som områder for innmatning og utmatning av en ekstern prosess, slik som et skall eller miljøer med en read–eval–print løkke (REPL). Buffere som GNU Emacs skaper selv har typisk et navn merket med asterisker på slutten, for å skille dem fra brukerbuffere. Også listen over åpne buffere vises i et buffer.
De fleste tastekombinasjoner er funksjonelle i et hvilket som helst buffer. Ctrl-s isearch, kan for eksempel brukes til å søke etter et filnavn i flere dired-buffere, og fil-listen kan lagres i en tekstfil på samme måte som i ethvert annet buffer. Modusen til dired-buffere kan byttes slik at de blir skrivbare, og slik at filnavnene og attributtene kan redigeres som tekst; når bufferet blir lagret, blir endringene skrevet til filsystemet. Dette gjør det mulig for mange datafiler å bli omdøpt, ved å bruke søke- og erstatt-funksjonene i GNU Emacs. I slike tilfeller viser GNU Emacs bildefilene i bufferene. GNU Emacs er binærtrygg og 8-biters ren.

GNU Emacs kan splitte redigeringsområdet inn i flere separate ikke-overlappende seksjoner kalt «vinduer». Denne egenskapen har vært tilgjengelig siden 1975, og går forut for de grafiske brukergrensesnitt som idag er i vanlig bruk. I Emacs-terminologien tilsvarer «vinduer» det som i HTML kalles «rammer» og i vindussystemer kalles «panerte vinduer». Dette er rektangulære deler av programmets skjermbilde som kan oppdateres og som man har interaksjon med uavhengig av hverandre. Hvert Emacs-vindu har en statuslinje («moduslinje») som vises i bunnen av vinduet. Emacs-vinduer er tilgjengelige både som tekst-terminaler og i grafisk modus og tillater flere buffere, eller flere deler av et buffer, å vises samtidig. Vanligvis viser et dired-buffer alle datafilene i den nåværende katalogen (det er også spesielle moduser som lar filbufferet følge datafilen som er fremhevet i dired). Kildekoden til et program kan vises i et annet vindu, mens et tredje vindu kan vise et skall-buffer med resultatet av å kompilere programmet. I et fjerde vindu kjøres en avluser sammen med et skall-buffer som kjører programmet. I et femte vindu kan det vises frem en man-side eller annen dokumentasjon (som også kan lastes ned via internett ved å bruke en av GNU Emacs sine innebygde nettlesere). Det er også mulig å vise flere datafiler for redigering samtidig, slik som en filheader sammen med dens implementasjon i et C-basert programmeringsspråk. follow-mode er en mindre modus hvor vinduer lenkes sammen for å vise ikke-overlappende deler av et buffer. I follow-mode kan en enkelt datafil vises i flere vinduer side-om-side som oppdateres når de rulles. GNU Emacs støtter også «innsnevring» av et buffer for å vise bare deler av en datafil, mens toppen/bunnen av bufferet navigerer funksjonelt og kalkulasjoner av bufferstørrelsen bare reflekterer det valgte område.
Emacs-vinduer er flislagte og kan ikke opptre «over» eller «under» et annet vindu. GNU Emacs kan starte flere «rammer» som vises som individuelle vinduer i et grafisk brukergrensesnitt. På en tekstbasert dataterminal vises flere rammer på en stakk som fyller hele terminalvinduet, og man kan svitsje mellom dem med standard Emacs-kommandoer.


=== Store modi ===

GNU Emacs kan vise eller redigere forskjellige typer tekst og kan oppføre seg i henhold til de programvareutvidelsene som kalles «store modi». Det finnes mange store modi for forskjellige hensikter. Eksempler er redigering av ordinære tekstfiler, såvel som av kildekoden til mange markeringsspråk og programmeringsspråk, visning av nettsider, mapper og annen systeminformasjon. Hver stor modus involverer et program skrevet i Emacs Lisp, som utvider egenskapene til GNU Emacs. Store modi sørger vanligvis for noen eller alle av følgende egenskaper:

Syntaksfremheving (font lock): Kombinering av fonter og farger («faces») som skiller mellom reserverte ord og kommentarer i et dataprogram
Automatiske innrykk for å opprettholde konsistent formatering i en datafil
Automatisk innsetting av åpenrom, linjeskift og paranteser
Spesielle redigeringskommandoer, slik som kommandoer for å hoppe til begynnelsen eller slutten av en funksjon mens man redigerer et dataprogram eller kommandoer for å validere dokumenter eller sette inn avsluttende koder når man arbeider med markeringsspråk som XML


=== Mindre modi ===

«Mindre modi» åpner for videre tilpasninger. Et buffer kan bruke bare en stor modus av gangen, men flere mindre modi kan operere samtidig. De kan operere direkte på dokumenter, på samme måte som den store modus for programmeringsspråket C definerer en separat mindre modus for hver enkelt av dens innrykkstiler, eller de kan endre redigeringsmiljøet. Eksempler på det siste inkluderer en modus som tilføyer muligheten til å angre på endringer i vinduskonfigurasjonen og en som utfører syntakssjekking under kjøring. Det er også en stor modus som tillater flere store moduser å brukes i en enkelt datafil, for enkelthets skyld når du redigerer et dokument hvor flere programmeringsspråk er innbakt.


=== Batchmoduser ===
GNU Emacs støtter muligheten for å bruke Emacs Lisp som en kommandotolk uten å vise teksteditoren i brukergrensesnittet. I batchmodus blir brukerkonfigurasjonen ikke lastet, og teksten som redigeres blir ikke vist til stdout gjennom kommandoene prin1, princ eller print (eller stderr ved feil). Interrupt-tegnene C-c og C-z vil ha deres vanlige effekt å avslutte et program eller suspendere utførelsen istedet for å påkalle Emacs-tastebindinger. GNU Emacs har kommandolinje-opsjoner som spesifiserer enten en fil som skal lastes og utføres, eller en Emacs Lisp-funksjon som kan sendes inn fra kommandolinjen. GNU Emacs vil starte opp, utføre den innsendte datafil eller funksjon, skrive ut resultatet, og så avslutte. Shebang-linjen #!/usr/bin/emacs --script kan skape frittstående skript i Emacs Lisp. Batchmodus er ikke en Emacs-modus per se, men beskriver en alternativ utførelse for Emacs-programmet.


== Manualer ==

I tillegg til innebygd dokumentasjon, finnes brukermanualen GNU Emacs Manual, som er skrevet av Richard Stallman. Den følger med GNU Emacs og kan vises med programvareverktøyet info i Unix og Unix-liknende operativsystemer.
Manualen til XEmacs ligner på GNU Emacs Manual; førstnevnte ble nemlig skapt på samme tid som XEmacs oppstod som en fork av GNU Emacs.
To tilleggsmanualer er også inkludert: Emacs Lisp Reference Manual av Bil Lewis, Richard Stallman og Dan Laliberte og An Introduction to Programming in Emacs Lisp av Robert Chassell (1946–2017). Alle tre manualene er også utgitt i bokform av Free Software Foundation.


== Internasjonalisering ==
GNU Emacs støtter mange alfabeter, skriftsystemer og kulturelle konvensjoner. Stavekontroll er også tilgjengelig for mange språk ved å bruke eksterne programmer som ispell. Fra versjon 24.1 ble det mulig å lese skrift både fra høyre mot venstre, og fra venstre mot høyre, for å støtte skriftsystemer for språk som arabisk, hebraisk og persisk.
Siden 1999 eller før har teksteditoren også vært istand til å vise de fleste naturlige språk.GNU Emacs støtter mange tegnsett, deriblant UTF-8. Siden versjon 23.1 har programmet benyttet UTF-8, mens tidligere versjoner hadde et eget internt tegnsett og konverterte til unicode under lasting og lagring. Det interne tegnsettet til XEmacs kan ligne på det som ble brukt av GNU Emacs, men er likevel forskjellig.
Brukergrensesnittet til GNU Emacs oppstod i den engelsktalende verden. Med unntak av opplæringsprogrammet, er brukergrensesnittet ikke oversatt til noe annet språk.
Tilleggsprogrammet Emacspeak gjør det mulig for svaksynte og blinde å kontrollere editoren gjennom akustisk tilbakekobling.


== Utvidbarhet ==

Oppførselen til GNU Emacs kan modifiseres og utvides nesten uten grenser ved å inkorporere Emacs Lisp programmer som definerer nye kommander, nye buffermodi, nye tastaturoppsett, tilføyde kommandolinjeopsjoner, og så videre. Mange utvidelser som gir brukersynlig funksjonalitet definerer en stor modus (enten for en ny filtype eller for å lage et nytt brukergrensesnitt); andre utvidelser definerer bare kommander eller mindre modi, eller sørger for funksjoner som forbedrer en annen utvidelse.
Mange utvidelser følger med GNU Emacs-installasjonen; andre kan nedlastes som løse datafiler (diskusjonsgruppen gnu.emacs.sources var en tradisjonell distribusjonskilde). Det har blitt utviklet pakker for nedlasting siden versjon 24, med et innebygd pakkesystem (i seg selv en utvidelse) til å nedlaste, installere og holde dem oppdatert. Listen av tilgjengelige pakker blir i selv vist i et Emacs-buffer satt i en stor modus til package-mode.
Eksempler på utvidelser er:

AUCTeX, verktøy for å redigere og prosessere dokumenter i formatene til TEX- og LATEX
dired, en filhåndterer
Dissociated press, en Racter-lignende tekstgenerator
Doctor, en implementasjon av ELIZA (dataprogram for naturlige språk)
Dunnet, et program for Interactive fiction
Emacs Web Wowser (eww), en nettleser.
Emacs Speaks Statistics (ESS) modus for å redigere statistiske språk som R og SAS
ERC, en IRC-klient for fildeling på internett
Eshell (Emacs shell) , et kommandolinjeskall skrevet i Emacs Lisp. Dette gir nærmere integrasjon med Emacs enn standardskall som bash eller PowerShell, som også finnes for Emacs. I Eshell er Elisp-funksjoner tilgjengelige som skallkommandoer og utmatningen fra Unix-kommandoer kan omdirigeres til et Emacs-buffer.
Exwm, en vindusbehandler for vindussystemet X som lar X11-applikasjoner kjøre i et Emacs-vindu.
Gnus, en nyhetsleser og e-postklient og et tidlig bevis på Zawinski's Lov
MULtilingual Enhancement (MULE) for redigering av tekst i mange språk på en måte som har analogier til Unicode
Org-mode for å skrive notater, vedlikeholde forskjellige typer av lister, planlegge og vurdere prosjekter, og å skape dokumenter i mange formater (deriblant PDF, HTML og OpenDocument). Org-mode brukes av generatorer av statiske nettsider, så vel som utvidelsen Babel, som kan brukes for litterat programmering.
Planner, en personlig informasjonshåndterer
rcirc, en IRC-klient for fildeling på internett
Superior Lisp Interaction Mode for Emacs (SLIME) utvider GNU Emacs til å bli et utviklingsmiljø for Common Lisp. Med SLIME (skrevet i Emacs Lisp) kommuniserer GNU Emacs editoren med et Common Lisp system (som bruker SWANK som backend) over en kommunikasjonsprotokoll og sørger for read–eval–print løkker, en datainspektør og en avluser.
Texinfo (Info), en online hjelpeleser
Zone, en display hack-modus som inkorporerer forskjellige teksteffekter.


== Ytelse ==
GNU Emacs har ofte kjørt betydelig saktere enn rivaliserende teksteditorer på systemer hvor den først ble implementert. Dette skyldes overhead og forsinkelser knyttet til lastingen av den Lisp-baserte kommandotolken. Moderne datamaskiner er kraftfull nok til å kjøre GNU Emacs uten forsinkelser, men versjoner forut for 19.29 (utgitt i 1995) kunne ikke redigere datafiler som var større enn 8 Mb. Grensen for filstørrelsen ble økt i etterfølgende versjoner, og i 32-biter versjon etter GNU Emacs 23.2 kan redigere filer som er opp til 512 Mb i størrelse. GNU Emacs som er kompilert på en 64-biter datamaskin kan håndtere mye større buffere.


== Plattformer ==
GNU Emacs er den mest populære utgaven av teksteditoren Emacs, og er også den utgaven som er blitt portert til flest plattformer.
GNU Emacs er et av de mest porterte ikke-triville dataprogrammer, og kjører på et mangfold av operativsystemer, deriblant MS-DOS, Microsoft Windows og OpenVMS. Støtte for enkelte «foreldede plattformer ble fjernet i Emacs 23.1», deriblant VMS og de fleste kommersielle Unix-varianter. GNU Emacs er tilgjengelig for de fleste Unix-liknende systemer, deriblant Linux, ulike derivater av BSD (FreeBSD, OpenBSD, NetBSD, DragonFly BSD, etc.), SunOS/Solaris, AIX, HP-UX, IRIX og macOS, og er ofte inkludert i disse systemenes installasjonspakker. Det finnes også porteringer av GNU Emacs til Android og Maemo fra Nokia.GNU Emacs kjører både på tekstbaserte terminaler og på systemer med grafiske brukergrensesnitt. På Unix og Unix-liknende systemer, kan GNU Emacs bruke vindussystemet X til å lage sitt eget brukergrensesnitt, enten direkte ved å bruke X Athena Widgets eller ved å benytte widgetverktøyer som Motif, LessTif eller GTK+. GNU Emacs benytter også de grafiske systemene til macOS og Microsoft Windows for å sørge for menylinjer, verktøylinjer, rullefelt og pop-up menyer, for å tilpasses utseendet til disse plattformene.


== Forker ==


=== XEmacs ===

Lucid Emacs, som var basert på en tidlig versjon av GNU Emacs 19, ble utviklet i begynnelsen av 1991 av Jamie Zawinski (1968–) og andre ved Lucid Inc. Den er en av de mest kjente forker av fri programvare som fant sted da kodebasen for de to Emacs-versjonene divergerte og de separate utviklingsteamene ikke prøvde å slå dem sammen igjen til et enkelt program.Etter at Lucid Inc. gikk konkurs, ble Lucid Emacs omdøpt til XEmacs. Utviklingen av XEmacs stanset opp; den siste stabile versjonen er 21.4.22 som ble utgitt i januar 2009, mens GNU Emacs på sin side har implementert mange tidligere egenskaper ved XEmacs. Dette har ført til antagelsen om den snarlige døden til XEmacs.


=== Andre forker av GNU Emacs ===
Andre forker av GNU Emacs, inkluderer blant annet:

Nemacs, forgjengeren til Lucid Emacs
Meadow, en japansk versjon for Microsoft Windows
SXEmacs, Steve Youngs' fork av XEmacs
Aquamacs, en versjon som fokuserer på integrasjon med brukergrensesnittet til Apple Macintosh
Remacs, en portering av GNU Emacs til programmeringsspråket Rust.


== Versjonshistorie ==
Endringer i hver versjon av GNU Emacs er opplistet i en NEWS-fil som distribueres sammen med GNU Emacs. Forandringer som er gjort ved nedgradering til en tidligere versjon er opplistet i en «Antinews»-fil, ofte med korte kommentarer om hvorfor dette er ønskelig. For å ta et eksempel: «For de brukerne som lever bakover i tid, her er informasjon om nedgradering til Emacs versjon 24.5. Vi håper at du vil like den større forenkling som resulterer i fraværet av mange Emacs 25.2-egenskaper».


== Referanser ==


== Kilder ==


=== Nettsteder ===
Waclena, Keith (2009). A Tutorial Introduction to GNU Emacs. The University of Chicago Library, 3. februar 2009, 23:37:14 CST. 


=== Litteratur ===
Richard M. Stallman, EMACS Manual for ITS Users, Artificial Intelligence Lab memo 554, 1980.
Richard M. Stallman, EMACS Manual for TWENEX Users, Artificial Intelligence Lab memo 555, 1980.


== Eksterne lenker ==
GNU Emacs på Commons
Offisiell nettside
Unofficial Emacs wiki