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 |
|
||||
|---------------------+------------------------------|
|
||||
|
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