2024-09-25 11:34:09 +00:00
|
|
|
|
#+TITLE: Konfigurer din egen Emacs!
|
|
|
|
|
#+EMAIL: larstvei@ifi.uio.no
|
|
|
|
|
|
|
|
|
|
* Installer Emacs
|
|
|
|
|
|
|
|
|
|
+ Følg de offisielle instruksjonene
|
|
|
|
|
+ https://www.gnu.org/software/emacs/download.html
|
|
|
|
|
|
|
|
|
|
* Finn konfigurasjonsfilen
|
|
|
|
|
|
|
|
|
|
+ Emacs leter etter en Emacs Lisp fil den kan kjøre ved oppstart
|
|
|
|
|
+ =~/.emacs.el= (få bruker dette)
|
|
|
|
|
+ =~/.emacs=
|
|
|
|
|
+ =~/.emacs.d/init.el=
|
|
|
|
|
+ I den rekkefølgen
|
|
|
|
|
+ Se https://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Init.html
|
|
|
|
|
+ For Windows + https://www.gnu.org/software/emacs/manual/html_node/emacs/Windows-HOME.html
|
|
|
|
|
|
2024-09-25 11:47:26 +00:00
|
|
|
|
* Tips
|
|
|
|
|
|
|
|
|
|
+ Det er lurt å forstå alt som legges inn i konfigurasjonsfilen
|
|
|
|
|
+ Du kan oppdatere Emacs under kjøring
|
|
|
|
|
+ Bruk =C-x C-e= for å evaluere et uttrykket bak pekeren
|
|
|
|
|
+ Bruk =M-x eval-buffer= for å evaluere hele filen
|
|
|
|
|
+ En konfigurasjonsfil bør være /idempotent/!
|
|
|
|
|
+ Det vil si at det er trygt å evaluere den flere ganger
|
|
|
|
|
|
2024-09-25 11:34:09 +00:00
|
|
|
|
* Sette variabler
|
|
|
|
|
|
|
|
|
|
+ Enkle konfigurasjoner gjøres ved å sette variabler
|
|
|
|
|
|
|
|
|
|
+ Få en mindre bråkete velkomst
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
;; Dette fjerner velkomstskjermen ved oppstart av Emacs.
|
|
|
|
|
(setq inhibit-splash-screen t)
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
+ Gi korte svar når Emacs ber om input
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
;; Emacs ber deg iblant svare "yes" eller "no". Dette gjør at Emacs
|
|
|
|
|
;; nøyer seg med "y" eller "n".
|
|
|
|
|
(setq use-short-answers t)
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
* Mindre distraksjoner ved å skru av modes
|
|
|
|
|
|
|
|
|
|
+ En blinkende peker blir fort gammelt
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
;; Skru av blinkende peker.
|
|
|
|
|
(blink-cursor-mode 0)
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
+ Andre GUI-elementer er også lite nyttig i et tastaturdrevet program!
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
;; Disse skrur av diverse GUI-elementer.
|
|
|
|
|
(menu-bar-mode 0)
|
|
|
|
|
(tool-bar-mode 0)
|
|
|
|
|
(scroll-bar-mode 0)
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
* Auto-revert
|
|
|
|
|
|
|
|
|
|
+ Vanligvis vil ikke Emacs automatisk oppdatere innholdet i et buffer når filen
|
|
|
|
|
endrer seg
|
|
|
|
|
+ I tillegg lagrer den «lås-filer» for å unngå at to programmer jobber på samme fil
|
|
|
|
|
+ Det kan være litt forvirrende, så la oss endre det
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
(global-auto-revert-mode)
|
|
|
|
|
(setq global-auto-revert-non-file-buffers t
|
|
|
|
|
create-lockfiles nil)
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
* Backup-filer
|
|
|
|
|
|
|
|
|
|
+ Emacs liker å lagre backupfiler, som kan være litt forkludrende
|
|
|
|
|
+ La oss gjemme de vekk
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
(setq backup-directory-alist `(("." . ,(locate-user-emacs-file "backups"))))
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
* Pakker
|
|
|
|
|
|
|
|
|
|
+ Det finnes utrolig mange pakker til Emacs
|
|
|
|
|
+ Legg til dette for å få tilgang til flere tusen pakker!
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
(require 'package)
|
|
|
|
|
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
+ Den enkleste måten å ta i bruk en pakke er med =use-package=
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
;; (use-package my-package-name
|
|
|
|
|
;; :ensure t ; Ensure my-package is installed
|
|
|
|
|
;; :after foo ; Load my-package after foo is loaded (seldom used)
|
|
|
|
|
;; :init ; Run this code before my-package is loaded
|
|
|
|
|
;; :bind ; Bind these keys to these functions
|
|
|
|
|
;; :custom ; Set these variables
|
|
|
|
|
;; :config ; Run this code after my-package is loaded
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
* Vertikalt minubuffer
|
|
|
|
|
|
|
|
|
|
+ Pakken =vertigo= gir en mer oversiktlig måte å interagere med minibufferet
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
;; VERTical Interactive COmpletion
|
|
|
|
|
(use-package vertico
|
|
|
|
|
:ensure t
|
|
|
|
|
:config
|
|
|
|
|
(setq vertico-count 25)
|
|
|
|
|
(vertico-mode 1))
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* Husk tidligere kommandoer
|
|
|
|
|
|
|
|
|
|
+ =savehist-mode= gjør at kommandoer du brukte nylig vises først
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
;; Save minibuffer history
|
|
|
|
|
(use-package savehist
|
|
|
|
|
:config
|
|
|
|
|
(savehist-mode 1))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
* Navigering og søking
|
|
|
|
|
|
|
|
|
|
+ Pakken =consult= forbedrer mange kommandoer når du skal navigere og søke
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
(use-package consult
|
|
|
|
|
:ensure t
|
|
|
|
|
:bind ("C-x b" . consult-buffer)
|
|
|
|
|
:config
|
|
|
|
|
(setq consult-preview-key (list :debounce 0.1 'any)))
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
2024-09-25 11:41:04 +00:00
|
|
|
|
* Tidligere besøkte filer
|
|
|
|
|
|
|
|
|
|
+ Emacs har såklart en mode for å tilgjengeliggjøre nylig besøkte filer
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
(recentf-mode t)
|
|
|
|
|
(setq recentf-max-saved-items 1000)
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
2024-09-25 11:34:09 +00:00
|
|
|
|
* Which-key
|
|
|
|
|
|
|
|
|
|
+ =which-key= er en pakke som hjelper deg finne tastekombinasjoner
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
;; Display available keybindings in popup
|
|
|
|
|
(use-package which-key
|
|
|
|
|
:ensure t
|
|
|
|
|
:config (which-key-mode 1))
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
* Fargetema!
|
|
|
|
|
|
|
|
|
|
+ Du kan Style emacs som du vil
|
|
|
|
|
+ Se https://emacsthemes.com/
|
|
|
|
|
+ Pakken =ef-themes= har mange gode fargetemaer
|
2024-09-25 11:43:47 +00:00
|
|
|
|
|
2024-09-25 11:34:09 +00:00
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
(use-package ef-themes
|
|
|
|
|
:ensure t
|
|
|
|
|
:config
|
|
|
|
|
(ef-themes-select 'ef-light))
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
+ Bruk =M-x consult-theme= for å teste ut ulike fargetemaer!
|
2024-09-25 11:43:47 +00:00
|
|
|
|
|
|
|
|
|
* Programmering
|
|
|
|
|
|
|
|
|
|
+ /Noen/ liker linjenummere
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
+ /Noen/ liker også relative linjenummere
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
(setq display-line-numbers-type t)
|
|
|
|
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
+ /Alle/ liker å se hvor en parentes starter og slutter
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp :tangle yes
|
|
|
|
|
|
|
|
|
|
(show-paren-mode 1)
|
|
|
|
|
|
|
|
|
|
#+end_src
|