Compare commits
20 Commits
Author | SHA1 | Date | |
---|---|---|---|
1817c9ccfd | |||
f51dc19298 | |||
f04f5eb23c | |||
2a163ba780 | |||
d6208c02e7 | |||
e42143edaf | |||
5617e62b99 | |||
f3f0ff622a | |||
f09fd2a40d | |||
0e8d043e42 | |||
6a5e866f31 | |||
7045d066b7 | |||
e637c1a6ce | |||
99015d93ce | |||
bf971b6afc | |||
6629fe28b8 | |||
575160d338 | |||
7d1f1cf595 | |||
8dd1eb5078 | |||
d50c2a2626 |
27
README.org
27
README.org
@ -1,25 +1,4 @@
|
|||||||
* Emacskurs vår 2015
|
#+TITLE: Velkommen til Emacskurs!
|
||||||
|
|
||||||
Her ligger kildekoden til alt kursmaterialet for kurset. Kurset arrangeres
|
- [[./slides.org][Slides]]
|
||||||
av [[http://fui.ifi.uio.no/][Fagutvalget ved Institutt for informatikk]], og holdes på Institutt for
|
- [[./init.org][Konfigurasjon]]
|
||||||
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,3 +1,5 @@
|
|||||||
|
#+OPTIONS: html-style:nil
|
||||||
|
|
||||||
|---------------------+------------------------------|
|
|---------------------+------------------------------|
|
||||||
| Tastekombinasjon | Beskrivelse |
|
| Tastekombinasjon | Beskrivelse |
|
||||||
|---------------------+------------------------------|
|
|---------------------+------------------------------|
|
||||||
@ -44,6 +46,7 @@
|
|||||||
|---------------------+------------------------------|
|
|---------------------+------------------------------|
|
||||||
| =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
350
idemyldring.org
@ -1,350 +0,0 @@
|
|||||||
#+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
|
|
Binary file not shown.
Before Width: | Height: | Size: 183 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.8 KiB |
Binary file not shown.
Before Width: | Height: | Size: 36 KiB |
Binary file not shown.
Before Width: | Height: | Size: 72 KiB |
256
index.org
256
index.org
@ -1,256 +0,0 @@
|
|||||||
#+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
Normal file
233
init.org
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
#+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,12 +1,15 @@
|
|||||||
#+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. 20 minutter)
|
+ Introduksjon til bruk av Emacs (ca. 30 minutter)
|
||||||
+ Se en konfigurasjonsfil vokse frem (ca. 20 minutter)
|
+ Dere installerer Emacs 29 (frem til maten kommer)
|
||||||
+ Pizza! (for de som er påmeldt)
|
+ Pizza! (for de som er påmeldt)
|
||||||
+ Workshop hvor vi hjelper deg komme i gang med Emacs (ca. 45 minutter)
|
+ Se en konfigurasjonsfil vokse frem (ca. 20 minutter)
|
||||||
|
+ Workshop hvor vi hjelper deg starte å konfigurere Emacs (ca. 20 minutter)
|
||||||
|
|
||||||
* Hva er Emacs?
|
* Hva er Emacs?
|
||||||
|
|
||||||
@ -52,7 +55,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=
|
||||||
|
|
||||||
@ -62,7 +65,11 @@
|
|||||||
+ Control
|
+ Control
|
||||||
|
|
||||||
+ =M-<any>=
|
+ =M-<any>=
|
||||||
+ Meta er =Alt= på de fleste maskiner (alternativt =ESC=)
|
+ Meta er venstre-=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
|
||||||
|
|
||||||
@ -120,7 +127,7 @@
|
|||||||
+ Gå til begynnelsen/slutten av bufferet
|
+ Gå til begynnelsen/slutten av bufferet
|
||||||
|
|
||||||
+ =C-l=
|
+ =C-l=
|
||||||
+ Juster vertikal visning av markøren til senter/toppen/bunnen
|
+ Juster vertikal visning av markøren til midten/toppen/bunnen
|
||||||
|
|
||||||
* Kill og yank
|
* Kill og yank
|
||||||
|
|
||||||
@ -144,6 +151,10 @@
|
|||||||
+ =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!
|
||||||
|
|
||||||
@ -155,6 +166,7 @@
|
|||||||
|
|
||||||
+ =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
|
||||||
@ -168,7 +180,7 @@
|
|||||||
+ Markerer all tekst
|
+ Markerer all tekst
|
||||||
|
|
||||||
+ =M-h=
|
+ =M-h=
|
||||||
+ Markerer en paragraf
|
+ Markerer et avsnitt ("paragraph")
|
||||||
|
|
||||||
+ Bruk i kombinasjon med =M-w=, =C-w= og =TAB=
|
+ Bruk i kombinasjon med =M-w=, =C-w= og =TAB=
|
||||||
|
|
||||||
@ -208,7 +220,7 @@
|
|||||||
+ Drep (kill) buffer
|
+ Drep (kill) buffer
|
||||||
|
|
||||||
+ =C-x left=, =C-x right=
|
+ =C-x left=, =C-x right=
|
||||||
+ En annen måte å bytter buffer på
|
+ En annen måte å bytte buffer på
|
||||||
|
|
||||||
* Kommandoer
|
* Kommandoer
|
||||||
|
|
||||||
@ -220,14 +232,15 @@
|
|||||||
|
|
||||||
+ =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 om treffet skal erstattes
|
+ Bruk =y= / =n= for å velge 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=
|
+ Avslutt med =RET=, slettekommando eller flytting av peker
|
||||||
|
|
||||||
+ =C-r=
|
+ =C-r=
|
||||||
+ Søk /bakover/ i bufferet
|
+ Søk /bakover/ i bufferet
|
||||||
@ -311,7 +324,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