Compare commits
No commits in common. "main" and "attic" have entirely different histories.
27
README.org
27
README.org
@ -1,4 +1,25 @@
|
|||||||
#+TITLE: Velkommen til Emacskurs!
|
* Emacskurs vår 2015
|
||||||
|
|
||||||
- [[./slides.org][Slides]]
|
Her ligger kildekoden til alt kursmaterialet for kurset. Kurset arrangeres
|
||||||
- [[./init.org][Konfigurasjon]]
|
av [[http://fui.ifi.uio.no/][Fagutvalget ved Institutt for informatikk]], og holdes på Institutt for
|
||||||
|
Informatikk i Simula, Tirsdag 17. Mars kl. 16:15.
|
||||||
|
|
||||||
|
Her er en oversikt over hva de forskjellige filene er:
|
||||||
|
|
||||||
|
- [[./emacs-init.el][emacs-init.el]] - en enkel konfigurasjonsfil.
|
||||||
|
- [[./slides.org][slides.org]] - org-filen som foilene genereres fra.
|
||||||
|
- [[./handout.org][handout.org]] - org-filen handouts genereres fra.
|
||||||
|
- [[./index.org][index.org]] - org-filen som kursets nettside genereres fra.
|
||||||
|
|
||||||
|
Du finner alt materiale på [[http://folk.uio.no/larstvei/emacskurs/][kursets nettside]] (som er generert fra
|
||||||
|
~index.org~). Merk at GitHub har støtte for å vise ~.org~-filer, så du kan
|
||||||
|
lese alt materiale her på GitHub.
|
||||||
|
|
||||||
|
* Lisens
|
||||||
|
|
||||||
|
#+BEGIN_HTML
|
||||||
|
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons-lisens" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />
|
||||||
|
#+END_HTML
|
||||||
|
|
||||||
|
Dette verk er lisensieret under en [[http://creativecommons.org/licenses/by-sa/4.0/][Creative Commons
|
||||||
|
Navngivelse-DelPåSammeVilkår 4.0 Internasjonal lisens]].
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#+OPTIONS: html-style:nil
|
|
||||||
|
|
||||||
|---------------------+------------------------------|
|
|---------------------+------------------------------|
|
||||||
| Tastekombinasjon | Beskrivelse |
|
| Tastekombinasjon | Beskrivelse |
|
||||||
|---------------------+------------------------------|
|
|---------------------+------------------------------|
|
||||||
@ -46,7 +44,6 @@
|
|||||||
|---------------------+------------------------------|
|
|---------------------+------------------------------|
|
||||||
| =C-d= | =delete-char= |
|
| =C-d= | =delete-char= |
|
||||||
| =M-d= | =kill-word= |
|
| =M-d= | =kill-word= |
|
||||||
| =M-DEL= | =backward-kill-word= |
|
|
||||||
| =C-_= | =undo= |
|
| =C-_= | =undo= |
|
||||||
| =C-t= | =transpose-chars= |
|
| =C-t= | =transpose-chars= |
|
||||||
| =M-t= | =transpose-words= |
|
| =M-t= | =transpose-words= |
|
||||||
|
350
idemyldring.org
Normal file
350
idemyldring.org
Normal file
@ -0,0 +1,350 @@
|
|||||||
|
#+PROPERTY: header-args:emacs-lisp :noweb yes
|
||||||
|
|
||||||
|
Jeg har brukt Org for å kunne beskrive tanker og idéer +uten+ kludrete
|
||||||
|
+kommentarer+.
|
||||||
|
|
||||||
|
* Tanker og noter
|
||||||
|
|
||||||
|
+ For å la det føles naturlig å gå inn og legge til eller endre, er nok
|
||||||
|
naturlige inndelinger viktig.
|
||||||
|
+ Skal vi utforme =early-init.el= òg?
|
||||||
|
+ Skal vi anbefale dem å kompilere =init.el=?
|
||||||
|
* Skal vi i så fall nevne =sharpquote= (=#'=)?
|
||||||
|
+ Bør vi anbefale =consult=?
|
||||||
|
* ~consult-theme~ gjør det enkelt å raskt bytte mellom tema. Det kan gi et
|
||||||
|
godt førsteinntrykk ...
|
||||||
|
* ~consult-buffer~, ~consult-line~, ~consult-imenu~ ...
|
||||||
|
+ ~vertico~ og ~marginalia~(?) må finne sin plass.
|
||||||
|
+ Samspillet mellom deamon, auto-revert og lockfiles
|
||||||
|
* lockfiles blir nok et forvirringsmoment (de var det for meg)
|
||||||
|
+ Bør vi se etter en subtil måte å sette indenteringspreferanser på?
|
||||||
|
* Tab som default
|
||||||
|
* Mellomrom i LISP
|
||||||
|
|
||||||
|
* Filen selv
|
||||||
|
|
||||||
|
Jeg har forsøkt å bruke inndelinger og kalle ~package-install~ eller
|
||||||
|
~use-pacakge~ ved hver inndeling i stedet for å hope dem opp på ett sted, så får
|
||||||
|
de mer innsikt i hvordan ting henger sammen, og det blir lettere å finne ting.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp :tangle init-forslag.el
|
||||||
|
;;; init-forslag.el -- Forslag til init.el -*- lexical-binding: t -*-
|
||||||
|
|
||||||
|
;; Noen info om filens opphav.
|
||||||
|
;; - Hvem som skrev + epost?
|
||||||
|
;; - Lenke til repoet så de kan finne det igjen.
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; Sammenfatting av hva vi har tatt med, og kort om hva vi har
|
||||||
|
;; vektlagt. Vi kan nevne her at vi legger vekt på IN2040.
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
|
||||||
|
;;; Grunnleggende oppsett
|
||||||
|
|
||||||
|
<<grunnleggende>>
|
||||||
|
|
||||||
|
|
||||||
|
;;; Filer og buffere
|
||||||
|
|
||||||
|
<<filer-og-buffere>>
|
||||||
|
|
||||||
|
|
||||||
|
;;; Hjelp og dokumentasjon
|
||||||
|
|
||||||
|
<<docs>>
|
||||||
|
|
||||||
|
|
||||||
|
;;; Annen programmering
|
||||||
|
|
||||||
|
<<prog-mode>>
|
||||||
|
|
||||||
|
|
||||||
|
;;; LISP
|
||||||
|
|
||||||
|
<<lisp>>
|
||||||
|
|
||||||
|
;;; init-forslag.el ends here
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Grunnleggende
|
||||||
|
:PROPERTIES:
|
||||||
|
:header-args:emacs-lisp: :noweb-ref grunnleggende
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Her har jeg lagt inn ting som gjelder Emacs fremfor programmering. Overskriften
|
||||||
|
bør kasnkje byttes, for det er ikke usannsynlig at det er her =consult= kan høre
|
||||||
|
hjemme.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; 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)
|
||||||
|
|
||||||
|
;; Dette fjerner velkomstskjermen ved oppstart av Emacs.
|
||||||
|
(setq inhibit-splash-screen t)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Vi bør kanskje gi en kort forklaring av hva custom gjør: Holder på enkelte
|
||||||
|
verdier mellom sessions. Vi
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
||||||
|
(load custom-file t t)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Oppsett for pakker
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;;;; Installering av tredjepartspakker
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Jeg har aldri brukt =package.el= eller ~use-package~ (har alltid håndtert ting
|
||||||
|
manuelt og byttet nylig til =straight.el=)
|
||||||
|
|
||||||
|
~package-initialize~ er autoloaded, så vi trenger ikke ~(require 'package)~.
|
||||||
|
Det kan ha pedagogisk hensikt å inkludere, da, for autoload er et konsept som
|
||||||
|
ikke alltid føles naturlig ...
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(require 'package)
|
||||||
|
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
|
||||||
|
(unless package-archive-contents
|
||||||
|
(package-refresh-contents))
|
||||||
|
(package-initialize)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** ~use-package~
|
||||||
|
|
||||||
|
Konfig-generatoren har denne tingen med, og en liten forklaring som dette er
|
||||||
|
betraktelig vennligere for en nybegynner enn [[help:use-package][dokumentasjonen]] ...
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; (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
|
||||||
|
|
||||||
|
** Oppsett for egen elisp
|
||||||
|
|
||||||
|
Hvis de skriver egen LISP, bør vi kanskje ha med dette så kompilering ikke
|
||||||
|
forvirrer resultatet ...
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(setq load-prefer-newer t)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Tema
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;;;; Tema og farger
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Det er nok en god idé å installere begge tema så det er raskere å bytte mellom.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; Vi har foreslått et mørkt og et lyst tema:
|
||||||
|
(package-install 'monokai-theme)
|
||||||
|
(package-install 'leuven-theme)
|
||||||
|
|
||||||
|
;; Avkommenter for å bruke foreslått mørkt tema:
|
||||||
|
;; (load-theme 'monokai t)
|
||||||
|
|
||||||
|
;; Avkommenter for å bruke foreslått lyst tema:
|
||||||
|
;; (load-theme 'leuven t)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** GUI-elementer
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;;;; GUI-elementer
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Jeg er enig i at scroll-, tool- og menu-bar bør skrus av. Jeg er veldig enig i
|
||||||
|
at ~blink-cursor-mode~ bør være av for menneskets velbehag, men har merket av
|
||||||
|
folk har sterkere meninger der. Jeg tenker at vi foreslår det ...
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; Skru av blinkende peker.
|
||||||
|
(blink-cursor-mode 0)
|
||||||
|
|
||||||
|
;; Disse skrur av diverse GUI-elementer.
|
||||||
|
(menu-bar-mode 0)
|
||||||
|
(tool-bar-mode 0)
|
||||||
|
(scroll-bar-mode 0)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Filer og buffere
|
||||||
|
:PROPERTIES:
|
||||||
|
:header-args:emacs-lisp: :noweb-ref filer-og-buffere
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Her må vi vurdere hvor mye vi vil ha med. Jeg har lagt til ~recentf-mode~, men
|
||||||
|
vi kan vurdere ~consult-buffer~, ~ibuffer~ og =project.el=.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; For at Emacs skal huske hvor peker var da du sist lukket en fil.
|
||||||
|
(save-place-mode)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Uten ~consult-buffer~, må kommandoen ~recentf~ brukes, og den er ikke bundet til noe.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(recentf-mode)
|
||||||
|
(setq recentf-max-saved-items 199
|
||||||
|
recentf-auto-cleanup 300)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
~ffap~ (/find-file-at-point/) gjør at ~find-file~ med peker på et filnavn bruker
|
||||||
|
det filnavnet som default.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; Med dette vil Emacs hvis peker er på et filnavn når du bruker
|
||||||
|
;; `find-file-at-point', foreslå å åpne den filen.
|
||||||
|
(ffap-bindings)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Navn på filer og buffere
|
||||||
|
|
||||||
|
Er det en god idé å gi dem en tast til å gi en fil de besøker nytt navn? Jeg
|
||||||
|
husker at jeg lette en del etter noe slikt da jeg begynte.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(keymap-set ctl-x-x-map "R" #'rename-visited-file)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Uniquify gjør det lettere å se forskjell på buffere med samme navn. Jeg har
|
||||||
|
tatt med instillingene fra min egen config. De gir formatet
|
||||||
|
=buffernavn |kontekst=.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(setq uniquify-buffer-name-style 'post-forward
|
||||||
|
uniquify-strip-common-suffix t
|
||||||
|
uniquify-separator " |"
|
||||||
|
uniquify-after-kill-buffer-p t
|
||||||
|
uniquify-ignore-buffers-re "^\\*")
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Auto-revert og lock-files
|
||||||
|
|
||||||
|
Hvordan vi håndterer auto-revert avhenger vel litt av hvordan vi presenterer
|
||||||
|
"lockfiles". "Lockfiles" er noe som forvirrer
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(global-auto-revert-mode)
|
||||||
|
(setq global-auto-revert-non-file-buffers t
|
||||||
|
create-lockfiles nil)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Backups
|
||||||
|
|
||||||
|
Jeg tenker at vi ikke snakker for mye om backups, men kanskje legger inn denne
|
||||||
|
linjen, for backups legges per default inn i samme mappen som filen, og det kan
|
||||||
|
være like plagsomt som det føles rotete ...
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
backup-directory-alist `(("." . ,(locate-user-emacs-file "backups")))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Hjelp og dokumentasjon
|
||||||
|
:PROPERTIES:
|
||||||
|
:header-args:emacs-lisp: :noweb-ref docs
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Jeg tenker det er viktig at vi får frem Emacs' /selvdokumenterende natur/.
|
||||||
|
|
||||||
|
** which-key og tastetrykk
|
||||||
|
|
||||||
|
~which-key~ er innebygd fra og med [[file:~/src/share/emacs/31.0.50/etc/NEWS.30::New package 'which-key'.][Emacs 30]]. Hvis vi skal ha det med, foreslår
|
||||||
|
jeg denne kombinajonen av innstillinger for ~which-key~ og ~echo-keystrokes~ for
|
||||||
|
å gi et responsivt, men ikke bråkete inntrykk, og med ~which-key~ alltid lett
|
||||||
|
tilgjengelig for oversikt.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(setq which-key-show-early-on-C-h t
|
||||||
|
which-key-idle-delay 600)
|
||||||
|
(setq echo-keystrokes 0.1)
|
||||||
|
(setq echo-keystrokes-help nil)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
|
** Helpful
|
||||||
|
|
||||||
|
Jeg tror det kan være en god idé å bruke ~helpful~, for informasjonen det gir,
|
||||||
|
tydeliggjør at Emacs er satt sammen av funksjoner og variable vi kan fly rundt
|
||||||
|
og skrive om. Når jeg selv hacker på Emacs, er nesten all kildekodeinteraksjon
|
||||||
|
gjennom helpful ...
|
||||||
|
|
||||||
|
Helpful har dessuten en liste av keymaps hver kommando er bundet til. Generelt
|
||||||
|
gjør helpful Emacs veldig transparent. :D
|
||||||
|
|
||||||
|
Jeg tenker at det er en god idé å binde disse til taster:
|
||||||
|
+ ~helpful-callable~
|
||||||
|
+ ~help-variable~
|
||||||
|
+ ~helpful-symbol~
|
||||||
|
+ ~helpful-key~
|
||||||
|
+ ~helpful-at-point~
|
||||||
|
|
||||||
|
~helpful-at-point~ har jeg selv stor glede av ...
|
||||||
|
|
||||||
|
* Generelt for prog-mode
|
||||||
|
:PROPERTIES:
|
||||||
|
:header-args:emacs-lisp: :noweb-ref prog-mode
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Bør få med:
|
||||||
|
+ ~corfu~
|
||||||
|
* ~kind-icon~ (virker det på non-u*ix?)
|
||||||
|
+ ~eglot~
|
||||||
|
|
||||||
|
Det er sikkert noen som vil ha linjenummer i margen. Folk som kommer fra =vim=,
|
||||||
|
har jeg inntrykk av at pleier å ville ha relative tall på talllinjen.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(setq display-line-numbers-type t)
|
||||||
|
;; (setq display-line-numbers-type 'relative)
|
||||||
|
(add-hook 'prog-mode-hook #'display-line-numbers-mode)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* LISP
|
||||||
|
:PROPERTIES:
|
||||||
|
:header-args:emacs-lisp: :noweb-ref lisp
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Vi bør nok separere Scheme og elisp, men dette gjelder for begge. Paredit kan
|
||||||
|
være noe stort for en introduksjon, men ~electric-pair-mode~ lar oss det minste
|
||||||
|
sette inn balanserte par.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; Automatically insert closing parens
|
||||||
|
(electric-pair-mode)
|
||||||
|
|
||||||
|
;; Visualize matching parens
|
||||||
|
(show-paren-mode 1)
|
||||||
|
;; (setq show-paren-delay 0
|
||||||
|
;; show-paren-style 'parenthesis)
|
||||||
|
|
||||||
|
#+end_src
|
BIN
img/MatrixBluePillRedPill.jpg
Normal file
BIN
img/MatrixBluePillRedPill.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 183 KiB |
BIN
img/editor-learning-curve.png
Normal file
BIN
img/editor-learning-curve.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.8 KiB |
BIN
img/lisp_cycles.png
Normal file
BIN
img/lisp_cycles.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 36 KiB |
BIN
img/workflow_2x.png
Normal file
BIN
img/workflow_2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 72 KiB |
256
index.org
Normal file
256
index.org
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
#+TITLE: Emacskurs
|
||||||
|
# #+OPTIONS: toc:nil num:nil
|
||||||
|
#+OPTIONS: toc:2 num:nil H:4 tex:imagemagick
|
||||||
|
#+HTML_HEAD: <meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
#+HTML_HEAD: <link type="text/css" rel="stylesheet" href="css/bootstrap.min.css" />
|
||||||
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/style.css" />
|
||||||
|
#+HTML_HEAD: <link href="images/emacs-icon.png" type="image/png" rel="icon"/>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="js/jquery-2.1.3.min.js"></script>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="js/jquery-ui.min.js"></script>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="js/jquery.tocify.min.js"></script>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="js/bootstrap.min.js"></script>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="js/org-bootstrap.js"></script>
|
||||||
|
|
||||||
|
* Introduksjon
|
||||||
|
|
||||||
|
Dette kurset arrangeres av [[http://fui.ifi.uio.no/][Fagutvalget ved Institutt for informatikk]], og
|
||||||
|
holdes på Institutt for Informatikk i Simula, Tirsdag 17. Mars kl. 16:15.
|
||||||
|
|
||||||
|
Denne siden er et supplement til kurset, der deler av stoffet dekkes, samt
|
||||||
|
linker til annet kursmaterialet og andre nyttige lenker.
|
||||||
|
|
||||||
|
** Kursmateriale
|
||||||
|
|
||||||
|
Kildekoden for alt materiale ligger på [[https://github.com/larstvei/emacskurs][GitHub]]. Her finner du:
|
||||||
|
|
||||||
|
- [[./foiler.html][Foiler]]
|
||||||
|
- [[./emacs-init.el][Konfigurasjonsfil]]
|
||||||
|
- [[./handout.html][Handout]]
|
||||||
|
|
||||||
|
Nettsiden er generert med et egenkomponert [[https://github.com/larstvei/org-bootstrap-document][Org-scheme]], og foilene er
|
||||||
|
generert med [[https://github.com/coldnew/org-ioslide][org-ioslide]].
|
||||||
|
|
||||||
|
** Nyttige lenker
|
||||||
|
- [[http://www.gnu.org/software/emacs/manual/html_node/emacs/index.html#Top][Emacs manualen]]
|
||||||
|
- [[http://termvakt.ifi.uio.no/Emacs][Termvaktens guide til Emacs]]
|
||||||
|
- [[http://www.masteringemacs.org/reading-guide/][En flott blogg om Emacs]]
|
||||||
|
- [[http://www.ic.unicamp.br/%7Ehelio/disciplinas/MC102/Emacs_Reference_Card.pdf][En cheat-sheet for Emacs]]
|
||||||
|
- [[http://www.reddit.com/r/emacs/][/r/emacs]]
|
||||||
|
- [[https://github.com/larstvei/dot-emacs][Min konfigurasjonsfil]]
|
||||||
|
|
||||||
|
* Komme igang med Emacs
|
||||||
|
|
||||||
|
Her står det litt om hvordan du installerer og konfigurerer Emacs.
|
||||||
|
|
||||||
|
** Emacs på Ifi
|
||||||
|
|
||||||
|
På Ifi er Emacs allerede installert. Du kan se hvilken versjon du har
|
||||||
|
tilgjengelig ved å skrive følgende i terminalen:
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
[larstvei@vetur ~]$ emacs --version
|
||||||
|
GNU Emacs 23.1.1
|
||||||
|
Copyright (C) 2009 Free Software Foundation, Inc.
|
||||||
|
GNU Emacs comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of
|
||||||
|
Emacs under the terms of the GNU General Public License. For more
|
||||||
|
information about these matters, see the file named COPYING.
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
I filområdet =/snacks/bin/= ligger det ekstra programvare, og der er en
|
||||||
|
nyere versjon av Emacs tilgjengelig. Se Termvaktsidene for mer informasjon
|
||||||
|
om [[http://termvakt.uio.no/Snacks][Snacks]].
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
[larstvei@vetur ~]$ /snacks/bin/emacs-newest --version
|
||||||
|
GNU Emacs 24.4.1
|
||||||
|
Copyright (C) 2014 Free Software Foundation, Inc.
|
||||||
|
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
|
||||||
|
You may redistribute copies of Emacs
|
||||||
|
under the terms of the GNU General Public License.
|
||||||
|
For more information about these matters, see the file named COPYING.
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
For å slippe å skrive =/snacks/bin/emacs-newest= hver gang kan vi lage et
|
||||||
|
alias. Denne kommandoen legger til en linje i din =~/.bashrc=-fil:
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
echo alias emacs='/snacks/bin/emacs-newest' >> ~/.bashrc
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Kommandoen ~alias emacs='/snacks/bin/emacs-newest'~ vil kjøres hver gang
|
||||||
|
du åpner en ny terminal. For at endringen skal ta effekt med en gang kan
|
||||||
|
du bruke ~source~:
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
[larstvei@vetur ~]$ source ~/.bashrc
|
||||||
|
[larstvei@vetur ~]$ emacs --version
|
||||||
|
GNU Emacs 24.4.1
|
||||||
|
Copyright (C) 2014 Free Software Foundation, Inc.
|
||||||
|
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
|
||||||
|
You may redistribute copies of Emacs
|
||||||
|
under the terms of the GNU General Public License.
|
||||||
|
For more information about these matters, see the file named COPYING.
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Fra Emacs 24 og oppover kommer Emacs med en innebygget pakke-behandler
|
||||||
|
som gjør det svært enkelt å finne nyttige utvidelser for Emacs. Denne
|
||||||
|
brukes i konfigurasjonsfilen, så man må med andre ord ha Emacs 24 for at
|
||||||
|
den skal fungere.
|
||||||
|
|
||||||
|
** Emacs på egen maskin
|
||||||
|
|
||||||
|
Emacs er tilgjengelig på Linux, OS X og Windows.
|
||||||
|
|
||||||
|
*** Linux
|
||||||
|
|
||||||
|
De aller fleste pakkesystemer for Linux har Emacs 24 tilgjengelig. Her
|
||||||
|
dekkes hvordan Emacs kan installeres for Ubuntu og Fedora, som
|
||||||
|
bruker hhv. ~apt-get~ og ~yum~.
|
||||||
|
|
||||||
|
For Ubuntu (og Debian) kan du bruke kommandoen:
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
sudo apt-get install emacs24
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
For Fedora skriver du kun:
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
sudo apt-get install emacs
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
*** OS X
|
||||||
|
|
||||||
|
Dersom du ikke allerede bruker [[http://brew.sh/][Homebrew]] kan du laste ned Emacs hos [[http://emacsformacosx.com/][Emacs
|
||||||
|
For OS X]]. Det er kun å flytte Emacs fra .dmg-fila til ~Applikasjoner~.
|
||||||
|
|
||||||
|
For Homebrew kan du kjøre kommandoen:
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
brew install --cocoa emacs
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
For at den skal bli søkbar i Spotlight må du kopiere Emacs til
|
||||||
|
~Applikasjoner~. Kommandoen ~open~ åpner filer og mapper, så ved å
|
||||||
|
kjøre:
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
open /usr/local/Cellar/emacs/24.4/
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
kan du bare flytte Emacs til ~Applikasjoener~.
|
||||||
|
|
||||||
|
Dersom man bruker Alfred holder det å legge til ~/usr/local/~ under
|
||||||
|
Features->Search Scope.
|
||||||
|
|
||||||
|
*** Windows
|
||||||
|
|
||||||
|
Du kan laste ned Emacs [[http://ftp.gnu.org/pub/gnu/emacs/windows/][her]]. Du finner filene helt på bunnen av siden, du
|
||||||
|
kan laste ned ~emacs-24.3-bin-i386.zip~, eller prøve en nyere hvis det
|
||||||
|
er tilgjengelig.
|
||||||
|
|
||||||
|
Extract mappen på et passende stad. Emacs er stand alone og trenger altså ikke å installeres.
|
||||||
|
Emacs kjøres ved å dobbeltklikke på filen runemacs.exe som ligger i mappen "bin".
|
||||||
|
|
||||||
|
Emacs fungerer på akkurat samme måte, men alt fungerer bedre i Linux eller på Mac.
|
||||||
|
|
||||||
|
** Konfigurere Emacs
|
||||||
|
|
||||||
|
Her gang Emacs starter ser den etter en konfigurasjonsfil, den velger
|
||||||
|
/den første/ den finner av disse tre filene:
|
||||||
|
|
||||||
|
- =~/.emacs=
|
||||||
|
- =~/.emacs.el=
|
||||||
|
- =~/.emacs.d/init.el=
|
||||||
|
|
||||||
|
Den siste ligger altså i en mappe som heter =~/.emacs.d/=, det kan være
|
||||||
|
fordelaktig dersom du ønsker å spre konfigurasjonen din over flere
|
||||||
|
~.el~-filer, eller dersom du ønsker å ha færre filer liggende i
|
||||||
|
hjemmeområdet.
|
||||||
|
|
||||||
|
Konfigurasjonsfilen blir tolket som et vanlig Emacs Lisp program, så alt
|
||||||
|
innholdet må være Emacs Lisp kode.
|
||||||
|
|
||||||
|
For å begynne kan du åpne Emacs og skrive =C-x C-f RET ~/.emacs=, og
|
||||||
|
skrive inn litt Emacs Lisp, f. eks:
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(blink-cursor-mode 0)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Dersom du lagrer (med =C-x C-s=) og åpner Emacs på nytt vil du se at
|
||||||
|
markøren ikke blinker lenger. Siden Emacs kan endres /under kjøring/ kan
|
||||||
|
du kun evaluere uttrykket, dette kan du gjøre ved å skrive =M-x
|
||||||
|
eval-buffer=, som evaluerer hele bufferet. Du kan også evaluere et enkelt
|
||||||
|
uttrykk ved å plassere markøren ved slutten av uttrykket og trykke =C-x
|
||||||
|
C-e=. Merk at endringer du gjør som ikke largres noe sted vil mistes når
|
||||||
|
du lukker Emacs.
|
||||||
|
|
||||||
|
Hvordan man konfigurerer gås nøyere gjennom under kurset, og vi tar
|
||||||
|
utgangspunkt i en enkel [[./emacs-init.el][konfigurasjonsfil]].
|
||||||
|
|
||||||
|
* Litt om bruk av verktøy
|
||||||
|
|
||||||
|
Som informatikkstudenter jobber vi mye med å løse problemer. Når vi jobber
|
||||||
|
med programmering blir vi ofte møtt med mange små hindringer som
|
||||||
|
distraherer oss fra problemet vi prøver å løse. Ved å velge gode verktøy
|
||||||
|
kan du unngå mange av disse hindringene og heller fokuser på å jobbe med
|
||||||
|
selve problemet.
|
||||||
|
|
||||||
|
Verktøyene vi bruker er gjerne programmer som [[http://termvakt.uio.no/Fjerninnlogging][SSH]], [[http://git-scm.com/][Git]], [[https://gcc.gnu.org/][GCC]], [[http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html][JDK]], [[https://eclipse.org/][Eclipse]],
|
||||||
|
[[http://www.latex-project.org/][LaTeX]] eller [[https://www.mozilla.org/en-US/firefox/developer/][Firefox]] og selvfølgelig et hav andre. De programmene vi velger
|
||||||
|
utgjør arbeidsflyten vår.
|
||||||
|
|
||||||
|
Noe av det vi gjør mest som programmerere er å jobbe med tekst. Det finnes
|
||||||
|
mange programmer som gjør denne jobben utmerket, f. eks. [[http://www.vim.org/][Vim]], [[http://www.sublimetext.com/3][Sublime]]
|
||||||
|
eller [[https://atom.io/][Atom]]. Vi skal lære om teksteditoren [[http://www.gnu.org/software/emacs/][Emacs]]. Det aller beste med Emacs
|
||||||
|
er at det kan /endres mens det kjører/. Dette er en utrolig kraftig
|
||||||
|
egenskap.
|
||||||
|
|
||||||
|
Om du ser for deg at du kommer til å programmere i mange år fremover er
|
||||||
|
min anbefaling at du lærer deg en håndfull programmer /godt/, og at en av
|
||||||
|
disse programmene bør være en teksteditor. Dersom du ønsker et fleksibelt
|
||||||
|
verktøy som dekker de fleste aspektene av programmering bør du se hva
|
||||||
|
Emacs har å tilby.
|
||||||
|
|
||||||
|
** Emacs
|
||||||
|
|
||||||
|
Emacs er et program som gir brukeren et interface for å redigere tekst. I
|
||||||
|
bunn er det en språktolker som kan tolke Emacs Lisp kode, som er et
|
||||||
|
fullverdig programmeringsspråk, med et stort bibliotek av funksjoner som
|
||||||
|
lar deg operere på tekst. Hver gang Emacs mottar et tastetrykk fyres det
|
||||||
|
av en funksjon. Disse funksjonene er som regel skrevet i Emacs Lisp
|
||||||
|
(resten er skrevet i C), og du kan åpne kildekoden og utforske hva den
|
||||||
|
gjør.
|
||||||
|
|
||||||
|
Siden Emacs Lisp er et tolket språk kan vi evaluere kode mens Emacs
|
||||||
|
kjører, og se effekten umiddelbart. Vi kan definere nye funksjoner, eller
|
||||||
|
redefinere eksisterende, og endre Emacs til å gjøre oppgavene vi
|
||||||
|
ønsker. Det unike med Emacs er at de endringene du gjør er en like «sann»
|
||||||
|
del av Emacs som alt av innebygd funksjonalitet, som gjør den langt mer
|
||||||
|
utvidbar enn de fleste andre programmer.
|
||||||
|
|
||||||
|
Som en effekt kan man bruke Emacs til utrolig mye forskjellig. Det finnes
|
||||||
|
støtte for de aller fleste programmeringsspråk, samt markup-språk som
|
||||||
|
HTML, LaTeX, Markdown og Org. Emacs kan også kommunisere med eksterne
|
||||||
|
prosesser, som lar deg f. eks. kjøre en terminal i Emacs, sende kode fra
|
||||||
|
et Emacs-buffer til en ekstern språktolker (f. eks. Python), som så
|
||||||
|
evalueres, kompilere LaTeX-dokumenter fra Emacs eller tilby et interface
|
||||||
|
til [[https://github.com/magit/magit][Git]].
|
||||||
|
|
||||||
|
Dersom man velger å bruke Emacs kan man også velge vekk veldig mange
|
||||||
|
andre programmer. Fordelen med dette er at det blir en slakere
|
||||||
|
læringskurve når du skal benytte deg av et nytt programmeringsspråk
|
||||||
|
e. l. siden du allerede er kjent med verktøyet. Ulempen er at
|
||||||
|
læringskurven til Emacs kan være noe bratt.
|
||||||
|
|
||||||
|
[[file:editor-learning-curve.png]]
|
||||||
|
|
||||||
|
* Lisens
|
||||||
|
|
||||||
|
#+BEGIN_HTML
|
||||||
|
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons-lisens" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />
|
||||||
|
#+END_HTML
|
||||||
|
|
||||||
|
Dette verk er lisensieret under en [[http://creativecommons.org/licenses/by-sa/4.0/][Creative Commons
|
||||||
|
Navngivelse-DelPåSammeVilkår 4.0 Internasjonal lisens]].
|
233
init.org
233
init.org
@ -1,233 +0,0 @@
|
|||||||
#+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
|
|
||||||
|
|
||||||
* 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
|
|
||||||
|
|
||||||
* 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
|
|
||||||
|
|
||||||
* 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
|
|
||||||
|
|
||||||
* 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
|
|
||||||
|
|
||||||
#+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!
|
|
||||||
|
|
||||||
* 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
|
|
35
slides.org
35
slides.org
@ -1,15 +1,12 @@
|
|||||||
#+TITLE: Emacskurs
|
#+TITLE: Emacskurs
|
||||||
#+EMAIL: larstvei@ifi.uio.no
|
#+EMAIL: larstvei@ifi.uio.no
|
||||||
|
|
||||||
[[https://git.larstvei.no/larstvei/emacskurs]]
|
|
||||||
|
|
||||||
* Plan for kurset
|
* Plan for kurset
|
||||||
|
|
||||||
+ Introduksjon til bruk av Emacs (ca. 30 minutter)
|
+ Introduksjon til bruk av Emacs (ca. 20 minutter)
|
||||||
+ Dere installerer Emacs 29 (frem til maten kommer)
|
|
||||||
+ Pizza! (for de som er påmeldt)
|
|
||||||
+ Se en konfigurasjonsfil vokse frem (ca. 20 minutter)
|
+ Se en konfigurasjonsfil vokse frem (ca. 20 minutter)
|
||||||
+ Workshop hvor vi hjelper deg starte å konfigurere Emacs (ca. 20 minutter)
|
+ Pizza! (for de som er påmeldt)
|
||||||
|
+ Workshop hvor vi hjelper deg komme i gang med Emacs (ca. 45 minutter)
|
||||||
|
|
||||||
* Hva er Emacs?
|
* Hva er Emacs?
|
||||||
|
|
||||||
@ -55,7 +52,7 @@
|
|||||||
|
|
||||||
+ Etter hvert:
|
+ Etter hvert:
|
||||||
+ Skriv din egen konfigurasjonsfil
|
+ Skriv din egen konfigurasjonsfil
|
||||||
+ Lær litt Emacs Lisp og skriv dine egne funksjoner
|
+ Lær litt Emacs Lisp, og skriv dine egne funksjoner
|
||||||
|
|
||||||
+ Gjør =Caps Lock= om til en ekstra =Ctrl=
|
+ Gjør =Caps Lock= om til en ekstra =Ctrl=
|
||||||
|
|
||||||
@ -65,11 +62,7 @@
|
|||||||
+ Control
|
+ Control
|
||||||
|
|
||||||
+ =M-<any>=
|
+ =M-<any>=
|
||||||
+ Meta er venstre-=Alt= på de fleste maskiner (alternativt =ESC=)
|
+ Meta er =Alt= på de fleste maskiner (alternativt =ESC=)
|
||||||
|
|
||||||
+ =S-<any>=
|
|
||||||
* Shift
|
|
||||||
* Kan ikke brukes med tegn du må bruke Shift for å nå (f.eks. =:=)
|
|
||||||
|
|
||||||
+ =<any>= representerer et vilkårlig tegn eller tastekombinasjon
|
+ =<any>= representerer et vilkårlig tegn eller tastekombinasjon
|
||||||
|
|
||||||
@ -127,7 +120,7 @@
|
|||||||
+ Gå til begynnelsen/slutten av bufferet
|
+ Gå til begynnelsen/slutten av bufferet
|
||||||
|
|
||||||
+ =C-l=
|
+ =C-l=
|
||||||
+ Juster vertikal visning av markøren til midten/toppen/bunnen
|
+ Juster vertikal visning av markøren til senter/toppen/bunnen
|
||||||
|
|
||||||
* Kill og yank
|
* Kill og yank
|
||||||
|
|
||||||
@ -151,10 +144,6 @@
|
|||||||
+ =C-d=, =M-d=, =C-M-d=
|
+ =C-d=, =M-d=, =C-M-d=
|
||||||
+ Fjern neste bokstav/ord/uttrykk
|
+ Fjern neste bokstav/ord/uttrykk
|
||||||
|
|
||||||
+ =DEL=, =M-DEL=, =C-M-DEL=
|
|
||||||
* Fjern forrige bokstav/ord/uttrykk
|
|
||||||
* =DEL= er "slettetasten", ikke "delete"
|
|
||||||
|
|
||||||
+ =C-_=, =C-/=, =C-x u=
|
+ =C-_=, =C-/=, =C-x u=
|
||||||
+ Undo!
|
+ Undo!
|
||||||
|
|
||||||
@ -166,7 +155,6 @@
|
|||||||
|
|
||||||
+ =M-q=
|
+ =M-q=
|
||||||
+ Formaterer avsnitt til en fornuftig linjebredde
|
+ Formaterer avsnitt til en fornuftig linjebredde
|
||||||
+ Setter inn og fjerner kommentartegn etter behov
|
|
||||||
|
|
||||||
+ =M-u=, =M-l=, =M-c=
|
+ =M-u=, =M-l=, =M-c=
|
||||||
+ Gjør neste ord til UPPERCASE/lowercase/Capital-Case
|
+ Gjør neste ord til UPPERCASE/lowercase/Capital-Case
|
||||||
@ -180,7 +168,7 @@
|
|||||||
+ Markerer all tekst
|
+ Markerer all tekst
|
||||||
|
|
||||||
+ =M-h=
|
+ =M-h=
|
||||||
+ Markerer et avsnitt ("paragraph")
|
+ Markerer en paragraf
|
||||||
|
|
||||||
+ Bruk i kombinasjon med =M-w=, =C-w= og =TAB=
|
+ Bruk i kombinasjon med =M-w=, =C-w= og =TAB=
|
||||||
|
|
||||||
@ -220,7 +208,7 @@
|
|||||||
+ Drep (kill) buffer
|
+ Drep (kill) buffer
|
||||||
|
|
||||||
+ =C-x left=, =C-x right=
|
+ =C-x left=, =C-x right=
|
||||||
+ En annen måte å bytte buffer på
|
+ En annen måte å bytter buffer på
|
||||||
|
|
||||||
* Kommandoer
|
* Kommandoer
|
||||||
|
|
||||||
@ -232,15 +220,14 @@
|
|||||||
|
|
||||||
+ =M-%=, =M-x query-replace RET <from> RET <to> RET=
|
+ =M-%=, =M-x query-replace RET <from> RET <to> RET=
|
||||||
+ Som =replace-string= for utvalgte treff
|
+ Som =replace-string= for utvalgte treff
|
||||||
+ Bruk =y= / =n= for å velge om treffet skal erstattes
|
+ Bruk =y=/=n= for om treffet skal erstattes
|
||||||
+ Bruk =!= for å erstatte resten av treffene
|
|
||||||
|
|
||||||
* Søking
|
* Søking
|
||||||
|
|
||||||
+ =C-s=
|
+ =C-s=
|
||||||
+ Søk /fremover/ i bufferet
|
+ Søk /fremover/ i bufferet
|
||||||
+ Gjenta =C-s= for neste treff
|
+ Gjenta =C-s= for neste treff
|
||||||
+ Avslutt med =RET=, slettekommando eller flytting av peker
|
+ Avslutt med =RET=
|
||||||
|
|
||||||
+ =C-r=
|
+ =C-r=
|
||||||
+ Søk /bakover/ i bufferet
|
+ Søk /bakover/ i bufferet
|
||||||
@ -324,7 +311,7 @@
|
|||||||
+ [[https://magit.vc/][Magit]]
|
+ [[https://magit.vc/][Magit]]
|
||||||
+ Det beste grensesnittet til Git
|
+ Det beste grensesnittet til Git
|
||||||
+ [[https://orgmode.org/][Org mode]]
|
+ [[https://orgmode.org/][Org mode]]
|
||||||
+ Et markup-språk med fantastisk støtte for
|
+ Et markup språk med fantastisk støtte for
|
||||||
+ Notater
|
+ Notater
|
||||||
+ Publisering
|
+ Publisering
|
||||||
+ Literate programming
|
+ Literate programming
|
||||||
|
Loading…
Reference in New Issue
Block a user