Extramaterial: Konfiguration av Emacs
När vi gick igenom Emacs nämnde vi helt kort att det går att konfiguera Emacs. För att ge en inblick i några modes som man kan tänkas vilja använda när man använder Emacs (i den här kursen och andra sammanhang) kommer vi att gå igenom ett par små men användbara minor modes. Vi kommer även visa lite Emacs Lisp-kod som man kan lägga in i sin .emacs
-fil för att ett mode automatiskt ska startas när Emacs startas eller när ett major mode startas.
1. Autoindentering
För att underlätta inskrivning och redigering av programkod i Emacs erbjuder flera av lägena i Emacs autoindentering och färgkodning. Autoindentering innebär att man anpassar texten så att det som hör ihop eller befinner sig på samma nivå i koden, hamnar lika långt in på raderna i bufferten.
Som exempel ska vi ta den välkända fakultetsfunktionen och definiera den i språken Lisp och Python. (Det är inte nödvändigt att förstå exakt vad exemplen gör.)
Lisp:
(defun fakultet (n)
(if (= n 0)
1
(* n (fakultet (1- n)))))
Python:
def fakultet(n):
if (n==0):
return 1
else:
return n*fakultet(n-1)
För båda dessa språk (och flera andra) finns det källkodslägen i Emacs som gör att nästa rad automatiskt fylls ut med med rätt antal mellanslag när du trycker på Enter
. Du kan också trycka på TAB
för att indentera den aktuella raden. Källkodslägena analyserar den kod du skriver och har flera extra funktioner för att kunna hoppa mellan olika delar i programmet, göra ändringar m.m.
Om du namnger dina filer med rätt filnamnsändelse kommer Emacs känna igen dem och automatiskt ladda rätt källkodsläge. För Lisp är det .lsp
, och för Python är det .py
. Om du av någon anledning inte lyckats få rätt källkodsläge kan du tvinga Emacs att byta läge med olika kommandon. För att tvinga Emacs att byta till Python-läge använder du kommandot M-x python-mode
. Motsvarande kommandon för andra källkodslägen är c-mode, lisp-mode, html-mode, o.s.v.
Ladda ner följande korta exempel på källkod: fak.lsp, fak.c, fak.py
Övning
Öppna någon av filerna ovan i Emacs för att se hur källkodslägen fungerar. För de flesta källkodslägen har en extra rullgardinsmeny lagts till. Undersök vilka alternativ som finns i den.
2. Färgkodning
Ett annat sätt att göra programkoden mer överskådlig är färgkodning. Det innebär att olika element i språket får olika färg när du skriver in dem. På så sätt blir det lättare att upptäcka syntaktiska fel. T.ex. kan alla kommentarer bli röda, alla fördefinierade ord lila och funktionsnamn blå.
Övning
Öppna någon av filerna i den förra övningen igen. Skriv därefter M-x font-lock-mode
för att aktivera färgkodning (om det inte redan är aktivt) och se vad som händer.
I figuren nedan visas ett exempel på hur Emacs kan se ut när man redigerar källkod i Ada:
Grundläggande färginställningar
De grundläggande färginställningarna i Emacs gör du genom att lägga till några av följande kommandon i din .emacs-fil:
Kommando | Förklaring |
---|---|
(set-background-color "färg") | Ändrar bakgrundsfärgen i Emacs |
(set-foreground-color "färg") | Ändrar förgrundsfärgen i Emacs |
(set-cursor-color "färg") | Ändrar färg på markören i Emacs |
Det kan vara på sin plats att påpeka att det är en dålig idé att ha samma bakgrundsfärg som förgrundsfärg.
Ställa in specialfärger
När du använder Emacs för att skriva programkod kan du aktivera färgning så att olika delar av koden färgas på olika sätt. Detta gör dels att det är lättare att läsa koden, dels att man snabbare ser om man har råkat skriva fel.
De olika delarna av programkoden kallas för element(eng. faces) och du kan ställa in färgningen genom att ange vilka färger som ska användas för olika sådana element.
M-x list-faces-display
visar en lista över alla tillgängliga faces.
Vi går igenom några av de vanligaste elementen här nedan. De element som börjar med font-lock- märks bara om man har aktiverat färgmärkning (M-x font-lock-mode
).
Element | Förklaring |
---|---|
'modeline | Statusraden längst ner i fönstret |
'region | Markerad text |
'font-lock-comment-face | Kommentarer |
'font-lock-function-name-face | Funktionsnamn |
'font-lock-string-face | Strängar, dvs text inom citationstecken |
'font-lock-keyword-face | Nyckelord |
Exempel på användning:
Kommando | Beskrivning |
---|---|
(set-face-foreground 'font-lock-comment-face "Red") | Ändrar textfärgen på kommentarer till röd. |
(set-face-background 'font-lock-comment-face "Black") | Ändrar bakgrundsfärgen på kommentarer till svart. |
(make-face-bold 'face) | Elementet 'face blir fetstilt. |
(set-face-underline-p 'face t) | Elementet 'face blir understruket. |
Testa att skriva in några av dessa kommandon i din .emacs-fil och starta om Emacs för att se resultatet. Kom ihåg att aktivera färgkodning med (font-lock-mode)
först.
3. Anpassa statusraden med mera
Man kan ändra en hel del saker i Emacs, t.ex. utseendet på statusraden. Här kommer några exempel på vad du kan lägga i .emacs:
Kommando | Förklaring |
---|---|
(column-number-mode t) | Visar i statusraden vilken kolumn markören står på. |
(setq display-time-24hr-format t) (setq display-time-day-and-date t) (display-time) |
Lägger till en klocka som visar dagens datum och tiden mitt på statusraden. |
(menu-bar-mode -1) | Döljer menyer. |
(scroll-bar-mode -1) | Döljer rullningslister (eng. scroll bars). |
(setq inhibit-startup-message t) | Döljer uppstartsmeddelandet. |
Man kan också skriva t.ex. M-x column-number-mode
när man har startat Emacs för att göra precis samma sak. Fast det senare måste man göra varje gång man startar Emacs för att man ska se kolumnräknaren.
4. Radlängd och onödiga tecken
En vanlig sak som man vill hålla koll på när man skriver kod är hur långa raderna är så att man undviker att de blir för långa. För att slippa behöva anpassa storleken på framen man använder kan man istället låta Emacs markera alla tecken som är efter den radlängden som man vill ha. Det är en av sakerna som whitespace-mode sköter åt en.
Whitespace-mode visar (lite beroende på inställningarna) alla tecken som är längre än den angivna radlängden, tab-tecken och så kallade trailing whitespaces (whitespaces som är på slutet av raden utan några icke speciella tecken, likt radbrytning, efter dem).
För att starta whitespace-mode när man startar Emacs kan man lägga till följande kod i sin .emacs fil:
require 'whitespace)
(setq whitespace-style '(face empty tabs lines-tail trailing))
(setq whitespace-line-column 79)
(t) (global-whitespace-mode
För att starta whitespace-mode när python-mode körs kan man lägga till följande kod i sin .emacs fil:
require 'whitespace)
(
(add-hook 'python-modelambda ()
(setq whitespace-style '(face empty tabs lines-tail trailing))
(setq whitespace-line-column 79)
(t))) (global-whitespace-mode
Tänk på att aldrig ha bredare fönster än 80 tecken. Det är lättare att läsa kod på höjden än på bredden.
5. Radnumrering
Ytterligare en mindre sak som man kan vilja se när man skriver sin kod är radnumrering av koden. Dels för att man ofta får ut felmeddelanden från interpretatorn (eller kompilatorn) med angivningar till vilken rad som det har gått fel på. För att Emacs ska visa radnumrering kan man använda sig av linum-mode.
För att starta linum-mode när man startar Emacs kan man lägga till följande kod i sin .emacs fil:
require 'linum)
(1) (global-linum-mode
För att starta linum-mode när python-mode körs kan man lägga till följande kod i sin .emacs fil:
require 'linum)
(
(add-hook 'python-modelambda ()
(1))) (global-linum-mode
6. Exempelfiler
Här finner du några exempel på hur .emacs kan se ut. Spara dessa filer i din hemkatalog ~
och kalla dem för .emacs
. Starta sedan Emacs och se vad som har hänt. Om du temporärt vill ta bort en inställning, placera ett eller flera semikolon först på raden (för att kommentera bort den) och starta om Emacs.
- emacs-kalle.el - Ett exempel på hur
.emacs
kan se ut. Innehåller lite av varje och ska förhoppningsvis inte vara allt för svår att förstå sig på som nybörjare. - emacs-ingemar.el - Ytterligare ett exempel som innehåller ganska många olika inställningar.
- emacs-ingemar2.el - Exempel med enbart färginställningar.
Sidansvarig: Peter Dalenius
Senast uppdaterad: 2025-06-30