Editors on IOOPM
Table of Contents
- 1. Introduktion till Emacs
- 2. Yas-snippets
- 3. Programmera Java i Emacs med meghanada
- 3.1. Steg 1: Starta Emacs
- 3.2. Steg 2: Lägg till melpa
- 3.3. Steg 3:
eval-region
(kör kod!) - 3.4. Steg 4: Starta Emacs pakethanterare
- 3.5. Steg 5: Markera paket för installation
- 3.6. Steg 6: Installera Emacspaket
- 3.7. Steg 7: Installera servern
- 3.8. Steg 8: Lägg till
meghanada-mode
iinit.el
- 3.9. Steg 9: Starta om Emacs.
- 3.10. Steg 10: Programmera Java!
- 4. Emacs på macOS
Most of this text is being written from scratch in 2018. For now, refer to the bootstrap sections on the C bootstap labs.
1 Introduktion till Emacs
Skrevs av Elias Castegren, huvudassistent på IOOPM 2011–2017. Vissa tillägg av Tobias (speciella kortkommandon för IOOPM).
Här finns en YouTube-kanal med 20+ Emacs-videos i tutorial-format, för dig som gillar video-orienterad kommunikation.
det här är en kort genomgång av några väldigt grundläggande
kommandon i Emacs. Dokumentet är inte utförligt eller ens särskilt
pedagogiskt, utan jag har försökt sammanfatta de kommandon som jag
själv har haft mest nytta av (och använder i princip dagligen).
Det är inte en introduktion, utan snarare en resurs för den som
har använt Emacs lite grand och vill lära sig att bli mer
effektiv. Du kan också använda filen init.el
(se ovan) som
utgångspunkt om du vill konfigurera ditt eget Emacs. Emacs letar
efter inställningar (bland annat) genom sökvägen
~/.emacs.d/init.el
.
Nästan alla kortkommandon i Emacs innehåller tangenterna Control och Meta (symbolen som ser ut som en diamant på tangentborden i datorsalarna). När man skriver ut kortkommandona skriver man C för Control och M för Meta. För att till exempel spara en fil trycker man C-x C-s, alltså först “Control x” (håll in Control och tryck “x”), och sen “Control s” (håll in Ctrl och tryck “s”). Det är ofta så att “Control bokstav” och “Meta bokstav” gör liknande saker. C-f flyttar till exempel fram markören ett tecken, medan M-f flyttar fram den ett helt ord. På datorer som inte har en Meta-tangent brukar man kunna använda ESC (i terminalen eller grafiskt) eller Alt (grafiskt) istället. På Mac-datorer funkar Cmd eller Alt (beroende på vilken version av Emacs man kör). I det här dokumentet skrivs specialtangenter som space, delete och return ut med vinkelhakar: <space>, <del> och <ret>.
Det bästa sättet att lära sig är att helt enkelt försöka använda alla kommandon så ofta som möjligt. Varje gång man gör något, om det så är kopiera text eller bara flytta markören, så ska man fundera på hur man kan göra det med så få knapptryckningar som möjligt. I början kommer det kännas omständligt att leta upp kortkommandon för allt man ska göra, men efter ett tag sätter det sig i fingrarna och då kommer man att bli mer effektiv i sitt arbete. Sist i dokumentet finns en sida som sammanfattar några användbara kommandon. Den kan man med fördel skriva ut och låta ligga bredvid datorn när man arbetar. Här följer en kort beskrivning av dessa kommandon.
1.1 Öppna filer och hantera buffrar
När man startar Emacs är det första man vill göra att välja vilken fil man vill jobba med. För att öppna en fil är kommandot C-x C-f (f som i find file). Om filen inte finns kommer den att skapas. Sparar gör man med C-x C-s (save file), eller C-x C-w (write file) om man vill ange ett nytt namn på filen. Rent tekniskt skapas en ny fil när man sparar för första gången.
När man öppnar en fil i Emacs läses den in till en buffer. Man kan ha flera buffrar inlästa samtidigt, och man byter buffer genom att trycka C-x b och ange namnet på buffern man vill byta till. C-x C-b visar en lista på alla inlästa buffrar, och C-x k (kill buffer) stänger den aktiva buffern.
Om man vill kunna se flera buffrar samtidigt kan man dela Emacs-fönstret horisontellt (C-x 2) eller vertikalt (C-x 3). Man byter mellan öppna fönster med C-x o (other window) eller genom att klicka i ett fönster. C-x 0 stänger det aktiva fönstret, och C-x 1 stänger alla fönster förutom det aktiva.
Om du använder inställningsfilen från IOOPM har du följande kortkommandon också:
- C-x | – delar fönstret vertikalt
- C-x - – delar fönstret horisontellt
- M-n n– öppna en tom buffert (som knyts till en fil först vid spara)
(De två första kortkommandona är inspirerade av tmux
.)
1.2 Navigering
Du kan scrolla nedåt i ett fönster med C-v (view next screen) och upp med M-v. C-l (center line) centrerar fönstret vid markören. Trycker man C-l flera gånger så scrollas fönstret så att markören hamnar överst eller underst i fönstret. Utöver dessa kommandon fungerar PgUp och PgDn som vanligt, även om moderna laptops inte brukar ha särskilda tangenter för dessa kommandon längre.
Kortkommandona för att flytta markören är C-f (forward), C-b (backward), C-n (next line) och C-p (previous line). Håller man in meta-tangenten istället för control (alltså M-f och M-b) flyttar man markören hela ord istället. Det finns också kortkommandon för att (bland annat) flytta markören till början eller slutet av den nuvarande raden, meningen, funktionen eller buffern.
Man kan flytta markören med piltangenterna (även i kombination med control- och meta-tangenterna) eller genom att klicka med musen också, men med kortkommandona går det betydligt snabbare och man slipper flytta händerna.
Varje gång man gör något “särskilt” i Emacs (markerar text, klipper ut eller kopierar något, söker, och så vidare) så sparas markörens nuvarande position högst upp i den så kallade mark-stacken. För att hoppa till den position som är överst i mark-stacken använder man C-u C-<space>. Det tar också bort den positionen från mark-stacken. Ett bra sätt att snabbt komma tillbaka till “där man nyss var” är att trycka C-u C-<space> några gånger.
Om du använder inställningsfilen från IOOPM har du följande kortkommandon också:
- C-x högerpil – flytta markören till fönstret till höger (fungerar också med vänster, upp och ned)
- C-' X – låter dig snabbt hoppa till alla förekomster av tecknet
X
som finns på skärmen (du kan förstås byta utX
mot valfritt annat tecken) - M-g c X – modernare variant av ovanstående funktion
- M-i – låter dig hoppa till t.ex. en funktion, etc. i koden
- M-å – färglägger ordet som markören står på i hela filen
- M-ä – hoppar till nästa förekomst av ordet som markören står på
- M-ö – hoppar till föregående förekomst av ordet som markören står på
- M-p – ersätt alla (efterföljande) förekomster av ordet som markören står på mot något annat
- M-g m – pusha en markering på mark-stacken
- M-g <space> – poppa en markering på mark-stacken och hoppa dit
1.3 Redigera text
Om man vill ta bort text i Emacs kan man ta bort enskilda tecken bakåt med <del> (backspace) och framåt med C-d (delete). När man tar bort mer text åt gången så klipper man egentligen ut den (så att man kan klistra in den igen). Man kan ta bort hela ord bakåt och framåt med M-<del> och M-d. Med C-k (kill line) tar man bort resten av raden från och med markören. C-0 k tar bort raden fram till markören
Trycker man C-<space> så börjar man markera text från markörens nuvarande position tills man gör något med markeringen (eller avbryter med C-g). Om man vill utvidga markeringen åt andra hållet kan man trycka C-x C-x (exchange point and mark) för att flytta markören till där man började markeringen (utan att förlora det man redan har markerat). Man kan också (bland annat) markera ett helt stycke, en hel funktion eller hela buffern.
När man har markerat text klipper man ut den med C-w (wipe) eller kopierar med M-w. Klistra in gör man sen med C-y (klistra in kallas yank i Emacs). För att komma åt gamla saker man har klippt ut kan man trycka M-y efter att man tryckt C-y. Då bläddrar man igenom allt man har klippt ut hittills.
Om du använder inställningsfilen från IOOPM har du följande kortkommandon också:
- M-Ä – starta multiple cursors mode (lägg till en till cursor på raden under)
- M-Å – starta multiple cursors mode (lägg till en till cursor på raden över)
- C-c n – rensar och indenterar bufferten (använd den på din källkod hela tiden!)
- M-g b – gå till första raden i filen
- M-g e – gå till sista raden i filen
- M-j – slå ihop aktuell rad med nedanstående rad
- M-S-uppåtpil – flytta markerade rader (eller aktuell rad om ingen är markerad) uppåt i filen
- M-S-nedåtpil – flytta markerade rader (eller aktuell rad om ingen är markerad) nedåt i filen
1.4 Söka och ersätta
Ett annat snabbt sätt att navigera i en fil är att söka efter textsträngar. Trycker man C-s (search) eller C-r (reverse search) kommer Emacs börja leta efter inmatad text framåt eller bakåt i filen. Trycker man C-s eller C-r igen så letar den efter nästa förekomst i filen. Om du står på ordet du vill söka efter kan du trycka C-s följt av C-w för att använda ordet som sökord. Du kan trycka C-w för att använda ytterligare ord som sökord.
Om man vill ersätta alla eller vissa förekomster av en textsträng
kan man använda kommandot M-% (M-Shift-5 på vanliga svenska
tangentbord). Man får då mata in texten man söker efter och vad
man vill ersätta den med. För varje förekomst av söksträngen får
man sen ange med y (yes) och n (no) om man vill att den
ska bytas ut eller inte (trycker man ? får man se fler möjliga
svarsalternativ). För att byta ut alla förekomster kan man använda
kommandot M-x replace-string
istället.
1.5 Terminal i Emacs
Man kan köra enskilda terminalkommandon från Emacs genom att
trycka M-! (M-Shift-1) och ange ett kommando. Anger man till
exempel ls
får man se alla filer som finns i samma katalog som
den aktiva filen. Det går också att öppna en terminal i ett
Emacs-fönster med kommandot M-x shell
. Den fungerar precis som
ett vanligt terminalfönster, med skillnaden att man måste hålla in
control för att bläddra mellan tidigare inmatningar med hjälp av
piltangenterna.
Observera att för kommandon som M-Ö måste du använda Esc som meta i terminalen!
1.6 Ångra och avbryt
Om man vill ångra tidigare ändringar använder man antingen C-x u (undo) eller C-_. Om man råkar påbörja ett oönskat kommando kan man avbryta det med C-g. Slutligen kan man spara alla inlästa buffrar och avsluta Emacs med C-x C-c.
1.7 Och sen då?
När man har lärt sig vad som står i det här dokumentet kan man börja leta vidare efter mer utförliga källor. Ett ställe att börja kan till exempel vara lektionen man får om man trycker C-h t i Emacs. Referensbladet är baserat på ett större referensblad men medvetet förkortat och förenklat för att vara överskådligt. När man känner sig säker på det grundläggande så kan ett bra nästa steg vara att skaffa ett större referensblad, till exempel något av de många man hittar när man googlar “emacs cheat sheet”. Man kan förstås också installera Emacs på sin hemdator.
En favoritfunktionalitet som det här dokumentet inte har tagit upp
är inspelning och uppspelning av macron. Trycker man C-x ( så
börjar man spela in alla tangenttryckningar man gör, tills man
avslutar med C-x ). Man kan sen spela upp sin senaste inspelning
med C-x e, som står för execute macro. Det är användbart om
man vill upprepa någonting flera gånger. Som ett enkelt exempel
kommer här ett macro som skriver en printf
-sats med radbrytning
och flyttar markören till argumentsträngens början:
C-x ( printf("\n");
M-b C-b C-x )
Efter att ha spelat in ovanstående macro kan man alltså trycka
C-x e för att få en printf
-sats med markören på rätt ställe.
Det går också att upprepa vilket kommando som helst ett visst
antal gånger genom att trycka C-u 5 (för något värde på 5) och
sen vilket kommando man vill upprepa. Vill man ta bort fyra på
varandra följande rader kan man alltså trycka C-u 4 C-k. Prova
också att skriva
C-x ( Emacs är bäst
<ret> C-x ) C-u 100
C-x e
På frågan “Kan man göra det här i Emacs” är svaret nästan alltid “Ja”, framförallt om det handlar om effektiv textredigering. Det går också att använda Emacs till exempel som webbläsare, e-postklient, chattklient, PDF-läsare, filhanterare, kalkylator, kalender och att-göra-lista. Hur insnöad man vill bli är upp till var och en (jag tycker till exempel inte att det är något fel på Chrome eller Firefox som webbläsare).
Lycka till i ditt framtida liv som Emacs-fantast!
Figure 1: Dr. Elias Castegren, känd som Emacs-Jesus under IOOPM 2017
2 Yas-snippets
Yasnippets finns installerade i IOOPM-inställningarna. Yasnippets
har stöd för templates som expaneras direkt i editorn. Varje gång
text “magiskt” dyker upp i editorn är det för att jag trycker
tab för att expandera texten. Pröva t.ex. main
tab,
eller for
tab, etc. Navigation mellan de olika “delarna” i
en snippet sker också med tab.
Observera att yasnippets optimerar editeringshastighet, men att det knappast är det viktigaste när det gäller programmering, eller ens att vara produktiv när det kommer till programmering!
3 Programmera Java i Emacs med meghanada
Här är steg-för-steg-beskrivningar för hur du kan installera meghanada i Emacs1, som alltså ger IDE-liknande funktionalitet, men inte “för mycket” (i min subjektiva bedömning alltså).
Observera att om du kör med en inställningsfil från IOOPM så behöver du endast utföra steg 1 och steg 7.
3.1 Steg 1: Starta Emacs
Starta Emacs. (Om Emacs redan är igång2 kan du hoppa över detta steg!)
3.2 Steg 2: Lägg till melpa
Klistra in följande rad i en tom3 buffer:
(setq package-archives '(("melpa" . "http://melpa.milkbox.net/packages/")))
%28setq%20package-archives%20%27%28%28%22melpa%22%20.%20%22http%3A%2F%2Fmelpa.milkbox.net%2Fpackages%2F%22%29%29%29%0A
3.3 Steg 3: eval-region
(kör kod!)
Markera hela ovanstående rad och kör M-x eval-region
4. Om du får ett felmeddelande om parsing
beror det på att du antingen inte har markerat hela raden eller
att en parentes i början eller slutet saknas – kanske för att du
“skrev av” raden fel.
3.4 Steg 4: Starta Emacs pakethanterare
Kör M-x package-list-packages
. Nu öppnas en sida som visar
hundratals paket som kan installeras i Emacs. Du kan markera ett
paket för installation genom att ställa markören på paketet och
trycka i5.
Package Version Status [v] Description ace-window 0.9.0 available Quickly switch windows. ack 1.5 available interface to ack-like tools ada-mode 5.3.1 available major-mode for editing Ada sources ada-ref-man 2012.3 available Ada Reference Manual 2012 adaptive-wrap 0.5.1 available Smart line-wrapping with wrap-prefix adjust-parens 3.0 available Indent and dedent Lisp code, automatically adjust cl$ aggressive-indent 1.8.3 available Minor mode to aggressively keep your code always ind$ ahungry-theme 1.8.0 available Ahungry color theme for Emacs. Make sure to (load-t$ all 1.0 available Edit all lines matching a given regexp ampc 0.2 available Asynchronous Music Player Controller arbitools 0.71 available Package for chess tournaments administration ascii-art-to-un... 1.11 available a small artist adjunct async 1.9.2 available Asynchronous processing in Emacs I auctex 11.91.0 available Integrated environment for *TeX* aumix-mode 7 available run the aumix program in a buffer auto-correct 1.1.3 available Remembers and automatically fixes past corrections auto-overlays 0.10.9 available Automatic regexp-delimited overlays
%20%20Package%20%20%20%20%20%20%20%20%20%20%20%20Version%20%20%20%20%20%20%20Status%20%5Bv%5D%20Description%0A%20%20ace-window%20%20%20%20%20%20%20%20%200.9.0%20%20%20%20%20%20%20%20%20available%20%20Quickly%20switch%20windows.%0A%20%20ack%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%201.5%20%20%20%20%20%20%20%20%20%20%20available%20%20interface%20to%20ack-like%20tools%0A%20%20ada-mode%20%20%20%20%20%20%20%20%20%20%205.3.1%20%20%20%20%20%20%20%20%20available%20%20major-mode%20for%20editing%20Ada%20sources%0A%20%20ada-ref-man%20%20%20%20%20%20%20%202012.3%20%20%20%20%20%20%20%20available%20%20Ada%20Reference%20Manual%202012%0A%20%20adaptive-wrap%20%20%20%20%20%200.5.1%20%20%20%20%20%20%20%20%20available%20%20Smart%20line-wrapping%20with%20wrap-prefix%0A%20%20adjust-parens%20%20%20%20%20%203.0%20%20%20%20%20%20%20%20%20%20%20available%20%20Indent%20and%20dedent%20Lisp%20code%2C%20automatically%20adjust%20cl%24%0A%20%20aggressive-indent%20%201.8.3%20%20%20%20%20%20%20%20%20available%20%20Minor%20mode%20to%20aggressively%20keep%20your%20code%20always%20ind%24%0A%20%20ahungry-theme%20%20%20%20%20%201.8.0%20%20%20%20%20%20%20%20%20available%20%20Ahungry%20color%20theme%20for%20Emacs.%20%20Make%20sure%20to%20%28load-t%24%0A%20%20all%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%201.0%20%20%20%20%20%20%20%20%20%20%20available%20%20Edit%20all%20lines%20matching%20a%20given%20regexp%0A%20%20ampc%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200.2%20%20%20%20%20%20%20%20%20%20%20available%20%20Asynchronous%20Music%20Player%20Controller%0A%20%20arbitools%20%20%20%20%20%20%20%20%20%200.71%20%20%20%20%20%20%20%20%20%20available%20%20Package%20for%20chess%20tournaments%20administration%0A%20%20ascii-art-to-un...%201.11%20%20%20%20%20%20%20%20%20%20available%20%20a%20small%20artist%20adjunct%0A%20%20async%20%20%20%20%20%20%20%20%20%20%20%20%20%201.9.2%20%20%20%20%20%20%20%20%20available%20%20Asynchronous%20processing%20in%20Emacs%0AI%20auctex%20%20%20%20%20%20%20%20%20%20%20%20%2011.91.0%20%20%20%20%20%20%20available%20%20Integrated%20environment%20for%20%2ATeX%2A%0A%20%20aumix-mode%20%20%20%20%20%20%20%20%207%20%20%20%20%20%20%20%20%20%20%20%20%20available%20%20run%20the%20aumix%20program%20in%20a%20buffer%0A%20%20auto-correct%20%20%20%20%20%20%201.1.3%20%20%20%20%20%20%20%20%20available%20%20Remembers%20and%20automatically%20fixes%20past%20corrections%0A%20%20auto-overlays%20%20%20%20%20%200.10.9%20%20%20%20%20%20%20%20available%20%20Automatic%20regexp-delimited%20overlays%0A%0A
Exemplet ovan visar en del av en paketlistning där paketet
auctex
är markerat för installation, vilket visas av I
i
första kolumnen. Blir du nyfiken på ett paket och vill veta mer
kan du trycka ? eller ENTER för att få mer information.
3.5 Steg 5: Markera paket för installation
3.6 Steg 6: Installera Emacspaket
Installera paketen genom att trycka x och sedan svara yes på frågan om du vill installera 5 paket. Det ser ut så här ungefär:
Install these 5 packages (company, use-package, meghanada, flycheck, diminish)? (yes or no)
Nu försöker Emacs kontakta melpa och ladda ned paketen. Du kan följa statusen längst ned i minibuffern.
Problem? Ibland är melpa överbelastat och svarar inte. I så fall kan du avbryta med C-g och pröva att trycka x igen. Om du inte ser att en massa filer laddas ned och installeras efter några sekunder brukar det betyda att melpa inte svarar och att du måste avbryta.
3.7 Steg 7: Installera servern
Kör M-x meghanada-install-server
.
Nu laddas ett Java-program ned som är det som kör själva Java-logiken under huven och analyserar din källkod etc.
3.8 Steg 8: Lägg till meghanada-mode
i init.el
Öppna ~/.emacs.d/init.el
och leta upp raden
(package-initialize)
Lägg sedan till följande:
(use-package meghanada :diminish meghanada-mode "Mm" :config (add-hook 'java-mode-hook (lambda () (meghanada-mode t) (flycheck-mode t) (company-mode t) (add-hook 'before-save-hook 'delete-trailing-whitespace))))
%28use-package%20meghanada%0A%20%20%3Adiminish%20meghanada-mode%20%22Mm%22%0A%20%20%3Aconfig%0A%20%20%28add-hook%20%27java-mode-hook%0A%20%20%20%20%20%20%20%20%20%20%20%20%28lambda%20%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28meghanada-mode%20t%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28flycheck-mode%20t%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28company-mode%20t%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28add-hook%20%27before-save-hook%20%27delete-trailing-whitespace%29%29%29%29%0A
Hittar du inte (package-initialize)
, skriv då det längst ned i filen
och sedan use-package, etc.
3.9 Steg 9: Starta om Emacs.
Starta om Emacs. Klart!
(Ett alternativ till att starta om Emacs är att markera alla rader
ovan förutom (package-initialize)
och köra M-x eval-region
.)
Meghanada kräver konfiguration för varje projekt!
Meghanada-mode vill helst att du kör maven eller gradle som är två Make-liknande verktyg som vi inte använder på kursen. Om du inte vill lära dig maven eller gradle just nu (mycket rimligt!) kan du istället lägga en konfigurationsfil i de kataloger där din Java-källkod finns.
Denna fil skall heta .meghanada.conf
12 och kan lämpligen innehålla följande:
sources = ["."] output = "classes" test-output = "debug"
sources%20%3D%20%5B%22.%22%5D%0Aoutput%20%3D%20%22classes%22%0Atest-output%20%3D%20%22debug%22%0A
Detta betyder: Leta efter källkod i den aktuella katalogen. Vi kompilering, lägg allt kompilerat i underkatalogen “classes” och alla test-filer i underkatalogen “debug”.
3.10 Steg 10: Programmera Java!
Ös!
4 Emacs på macOS
Om du installerar Emacs på macOS så är Alt din Meta-tangent. Det är inget fel med det, men avsaknaden av AltGr (en Mac har två Alt istället) gör att vissa tecken som är vanligt förekommande i programmering inte går att skriva:
[
tolkas som kortkommandot M-8 och]
som kortkommandot M-9.{
tolkas som kortkommandot M-7 och}
som kortkommandot M-0.$
tolkas som kortkommandot M-4.
Lösningen på detta är att lägga till följande i filen init.el
som finns i katalogen .emacs.d
i din hemkatalog. Kopiera och
klistra in (och starta sedan om Emacs)!
;; Teach Emacs Swedish keyboard layout (define-key key-translation-map (kbd "M-8") (kbd "[")) (define-key key-translation-map (kbd "M-9") (kbd "]")) (define-key key-translation-map (kbd "M-(") (kbd "{")) (define-key key-translation-map (kbd "M-)") (kbd "}")) (define-key key-translation-map (kbd "M-7") (kbd "|")) (define-key key-translation-map (kbd "M-/") (kbd "\\")) (define-key key-translation-map (kbd "M-2") (kbd "@")) (define-key key-translation-map (kbd "M-4") (kbd "$"))
%3B%3B%20Teach%20Emacs%20Swedish%20keyboard%20layout%0A%28define-key%20key-translation-map%20%28kbd%20%22M-8%22%29%20%28kbd%20%22%5B%22%29%29%0A%28define-key%20key-translation-map%20%28kbd%20%22M-9%22%29%20%28kbd%20%22%5D%22%29%29%0A%0A%28define-key%20key-translation-map%20%28kbd%20%22M-%28%22%29%20%28kbd%20%22%7B%22%29%29%0A%28define-key%20key-translation-map%20%28kbd%20%22M-%29%22%29%20%28kbd%20%22%7D%22%29%29%0A%0A%28define-key%20key-translation-map%20%28kbd%20%22M-7%22%29%20%28kbd%20%22%7C%22%29%29%0A%28define-key%20key-translation-map%20%28kbd%20%22M-%2F%22%29%20%28kbd%20%22%5C%5C%22%29%29%0A%0A%28define-key%20key-translation-map%20%28kbd%20%22M-2%22%29%20%28kbd%20%22%40%22%29%29%0A%28define-key%20key-translation-map%20%28kbd%20%22M-4%22%29%20%28kbd%20%22%24%22%29%29%0A
Tips: klistra in i Emacs är C-y. För att slippa starta om
Emacs för att inställningarna skall gälla kan du markera den
inklippta texten och köra M-x eval-region
.
Questions about stuff on these pages? Use our Piazza forum.
Want to report a bug? Please place an issue here. Pull requests are graciously accepted (hint, hint).
Nerd fact: These pages are generated using org-mode in Emacs, a modified ReadTheOrg template, and a bunch of scripts.
Ended up here randomly? These are the pages for a one-semester course at 67% speed on imperative and object-oriented programming at the department of Information Technology at Uppsala University, ran by Tobias Wrigstad.
Footnotes:
emacs-uptime
för att se hur länge ditt Emacs
varit igång?