Slett masse (flyttet til attic)
This commit is contained in:
parent
14576bcf40
commit
d50c2a2626
25
README.org
25
README.org
@ -1,25 +0,0 @@
|
|||||||
* Emacskurs vår 2015
|
|
||||||
|
|
||||||
Her ligger kildekoden til alt kursmaterialet for kurset. 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.
|
|
||||||
|
|
||||||
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 |
|
||||||
|---------------------+------------------------------|
|
|---------------------+------------------------------|
|
||||||
|
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]].
|
|
Loading…
Reference in New Issue
Block a user