Christians Emacs-tips

GNU Emacs är en bra texteditor. Det kan vara värt att gå igenom the Emacs Tutorial, som du kommer åt i Help-menyn. I det här dokumentet koncentrerar vi oss på olika inställningar som du kan tänkas vilja göra (jämför till exempel figur 1 och figur 2).

Emacs lagrar sina inställningar i filen .emacs i hemkatalogen. För att se om du har en sådan, kan du köra kommandot ls .emacs. Om du inte har det kan du — i alla fall om du sitter vid Chalmers' datorer — kopiera in en sådan med kommandot cp /etc/skel/.emacs ~/.emacs. Detta rekommenderas starkt.

Texten fortsätter nedanför figurerna.

Emacs med vackra färger
Figur 1: Emacs med font-lock-mode och flyspell-mode, i full färd med att editera en LaTeX-fil. Jämför med figur 2.

Emacs utan vackra färger
Figur 2: Emacs utan font-lock-mode och utan flyspell-mode. Jämför med figur 1.

font-lock-mode

Den kanske tydligaste skillnaden mellan figur 1 och figur 2 är närvaron respektive frånvaron av font-lock-mode. Andra texteditorer använder ibland begreppet syntax highlighting för att beteckna samma sak. Det innebär att texten färgläggs eller formateras beroende på vad de olika tecknen har för betydelse: i figurer 1 och 2 ser vi hur kommandon får en färg, matematiska uttryck får en annan färg, texten som kommer luta i slutresultatet lutar även i källkoden, osv.

Vill du sätta på font-lock-mode för en viss fil kan du skriva M-x font-lock-mode, där M-x innebär att du ska hålla nere Meta-tangenten (förmodligen Alt-tangenten, om ditt tangentbord saknar en riktig Meta) medan du trycker x. Sedan är det bara att skriva in kommandot.

Vill man få font-lock-mode utan att man ber om det, kan man lägga följande kodsnutt i sin .emacs-fil. Detta är precis den kod som i skrivande stund ligger (tillsammans med ytterligare några kodsnuttar) i filen /etc/skel/.emacs.

;; turn on font-lock mode
(when (fboundp 'global-font-lock-mode)
  (global-font-lock-mode t))

Förändringar i din .emacs-fil gäller från nästa gång du startar Emacs.

flyspell-mode

En annan sak som du möjligen lagt märke till när du jämförde figur 1 och figur 2 är att ordet MacReflex är understruket och gulfärgat i figur 1. Detta är den automatiska stavningskontrollen.

För att sätta på stavningskontroll för ett konkret dokument, skriv M-x flyspell-mode. Samma kommando stänger av flyspell-mode. Du kan ställa in vilket språk den ska använda vid kontrollen genom kommandot M-x ispell-change-dictionary.

När flyspell-mode är aktiverat kontrolleras texten löpande allteftersom du skriver. Om du öppnar en redan existerande text, kan du begära stavningskontroll av alltihop med M-x flyspell-buffer. Flyspell stryker under okända ord, och du kan mittenklicka (klicka musknapp 2) på ett ord för att få upp olika svarsalternativ. Om du föredrar att texten inte stryks under, men vill ha stavningskontroll ändå, kan du använda kommandot M-x ispell-buffer.

Om du alltid vill ha svensk stavningskontroll när du redigerar textfiler (inklusive LaTeX-filer), kan du lägga följande i din .emacs-fil. Dessa inställningar kommer inte att påverka Emacs beteende när du redigerar programfiler.

(add-hook 'text-mode-hook '(lambda () (ispell-change-dictionary "svenska" nil)))
(add-hook 'text-mode-hook '(lambda () (flyspell-mode nil)))

auto-fill-mode

I både figur 1 och figur 2 är raderna brutna efter lämpligt antal tecken. Många nybörjare brukar dock inte bry sig om radbrytning, utan låta ett helt stycke stå på en och samma rad. Emacs kommer inte bryta upp ett stycke på flera rader, om du inte själv aktiverar automatisk radbrytning. Detta görs med kommandot M-x auto-fill-mode. Samma kommando igen stänger av radbrytning.

Den automatiska radbrytningen gäller bara det du skriver in i presens, inte det som eventuellt redan stod i filen du ändrar i. För att ändra radbrytningen i något visst stycke kan du ställa dig i det stycket och trycka M-q.

Om du alltid vill ha automatisk radbrytning när du redigerar textfiler, kan du lägga följande rad i din .emacs-fil.

(add-hook 'text-mode-hook 'turn-on-auto-fill)

Indentering

Om man använder Emacs i Java-kursen så finns det en gyllene regel att hålla sig till: använd mellanslag, inte tab, för indentering. Detta fixas automatiskt genom att lägga följande kod i din .emacs-fil:

(setq-default indent-tabs-mode nil)

Jag rekommenderar även följande, som ger lite snyggare indentering.

(c-set-offset (quote substatement-open) 0 nil)

Dessa rader är bra. Du vill ha dem.

Summa summarum

Om du har utgått från /etc/skel/.emacs och följt instruktionerna här, kommer din .emacs-fil (som ligger i din hemkatalog) att se ut så här:

;; .emacs

;;; uncomment this line to disable loading of "default.el" at startup
;; (setq inhibit-default-init t)

;; turn on font-lock mode
(when (fboundp 'global-font-lock-mode)
  (global-font-lock-mode t))

;; enable visual feedback on selections
;(setq transient-mark-mode t)

;; default to better frame titles
(setq frame-title-format
      (concat  "%b - emacs@" system-name))

(add-hook 'text-mode-hook '(lambda () (ispell-change-dictionary "svenska" nil)))
(add-hook 'text-mode-hook '(lambda () (flyspell-mode nil)))

(add-hook 'text-mode-hook 'turn-on-auto-fill)

(setq-default indent-tabs-mode nil)
(c-set-offset (quote substatement-open) 0 nil)

Christian von Schultz <christian.von.schultz@chalmers.se>