Recover from microbel
This commit is contained in:
commit
c16cef839f
23
.gnus
Normal file
23
.gnus
Normal file
@ -0,0 +1,23 @@
|
||||
;; Eksempel på .gnus-fil.
|
||||
|
||||
(setq user-mail-address "user@example.org")
|
||||
(setq user-full-name "Navnet Mitt")
|
||||
|
||||
(setq gnus-select-method '(nntp "news.ntnu.no"))
|
||||
|
||||
(setq gnus-secondary-select-methods
|
||||
'((nnimap "imap.stud.ntnu.no"
|
||||
(nnimap-authinfo-file "~/.authinfo")
|
||||
(nnimap-stream ssl))
|
||||
(nnimap "imap.pvv.ntnu.no"
|
||||
(nnimap-authinfo-file "~/.authinfo")
|
||||
(nnimap-stream ssl))))
|
||||
|
||||
;; Filen ~/.authinfo inneholder følgende tekst (der BRUKERNAVN
|
||||
;; erstattes med det aktuelle brukernavnet):
|
||||
;; machine imap.stud.ntnu.no login BRUKERNAVN port imap
|
||||
;; machine imap.pvv.ntnu.no login BRUKERNAVN port imap
|
||||
|
||||
(setq smtpmail-default-smtp-server "smtp.pvv.ntnu.no")
|
||||
(setq smtpmail-local-domain "localhost")
|
||||
(setq smtpmail-sendto-domain "localhost")
|
9
README.txt
Normal file
9
README.txt
Normal file
@ -0,0 +1,9 @@
|
||||
Materiale fra PVVs Emacs-kurs 12. april 2012.
|
||||
|
||||
Innhold:
|
||||
* emacs-kurs.txt: teksten som ble vist på kurset
|
||||
* kurs.el: inneholder kurs-mode, som ble brukt til å vise emacs-kurs.txt
|
||||
* kill-ring.el: eksempel på elisp-kode som ble vist på kurset
|
||||
* .gnus: eksempel på konfigurasjonsfil for Gnus
|
||||
|
||||
http://wiki.pvv.ntnu.no/pvv/Kurs/Emacs_(2012)
|
698
emacs-kurs.txt
Normal file
698
emacs-kurs.txt
Normal file
@ -0,0 +1,698 @@
|
||||
|
||||
((Emacs-kurs))
|
||||
|
||||
|
||||
|
||||
((Installere Emacs.))
|
||||
|
||||
aptitude install emacs emacs23-el
|
||||
|
||||
(Erstatt «23» med nyeste versjon i pakkesystemet ditt.)
|
||||
|
||||
Debian-brukere bør i tillegg gjøre
|
||||
|
||||
aptitude install emacs23-common-non-dfsg
|
||||
|
||||
(Emacs-manualen er ikke fri nok for Debian.)
|
||||
|
||||
Windows-brukere bør installere Linux. Eller gå til
|
||||
|
||||
http://ftp.gnu.org/pub/gnu/emacs/windows/
|
||||
|
||||
De som bruker FreeBSD, NetBSD, Plan 9 eller andre rariteter finner ut
|
||||
av dette på egen hånd.
|
||||
|
||||
|
||||
|
||||
((Starte Emacs.))
|
||||
|
||||
Skriv «emacs» på kommandolinjen, eller bruk pek-og-klikk-teknologi.
|
||||
|
||||
Hvis du ikke vil ha et X-vindu, skriv «emacs -nw» isteden.
|
||||
|
||||
|
||||
|
||||
((Tastekombinasjoner.))
|
||||
|
||||
Modifikatorer: C er control, M er meta (ofte merket «alt»).
|
||||
|
||||
`M-x' betyr «hold inne meta og trykk x».
|
||||
|
||||
`C-x k' betyr «hold inne control og trykk på x, slipp opp control,
|
||||
trykk k».
|
||||
|
||||
`C-x C-s' betyr «hold inne control og trykk x, hold inne control og
|
||||
trykk s» (det er ikke nødvendig å slippe control i mellomtiden).
|
||||
|
||||
|
||||
|
||||
((Åpne og lagre filer.))
|
||||
|
||||
`C-x C-f' (find-file). Kommando for å åpne en fil. (Filen trenger
|
||||
ikke eksistere fra før).
|
||||
|
||||
`C-x C-s' (save-buffer). Lagre filen du holder på å redigere.
|
||||
|
||||
(Prøv dette nå).
|
||||
|
||||
|
||||
|
||||
((Funksjoner og kommandoer.))
|
||||
|
||||
Emacs består av mange funksjoner.
|
||||
|
||||
Noen av funksjonene er /interaktive/ funksjoner, også kjent som
|
||||
/kommandoer/. Disse får man direkte tilgang til når man bruker Emacs.
|
||||
(Andre funksjoner er hjelpefunksjoner for kommandoene.)
|
||||
|
||||
find-file og save-buffer er eksempler på kommandoer.
|
||||
|
||||
|
||||
|
||||
((Kjøring av kommandoer. Tastebindinger.))
|
||||
|
||||
Kommandoen `M-x' (execute-extended-command) kan brukes til å kjøre en
|
||||
vilkårlig kommando.
|
||||
|
||||
For eksempel kan vi si `M-x find-file' for å kjøre kommandoen
|
||||
find-file. (Prøv dette nå).
|
||||
|
||||
Men det er slitsomt. Derfor er de mest brukte kommandoene bundet til
|
||||
taster. For eksempel er find-file bundet til `C-x C-f'.
|
||||
|
||||
Vi kan endre tastebindingene etter eget forgodtbefinnende. Dette skal
|
||||
vi se på senere.
|
||||
|
||||
|
||||
|
||||
((Litt om minibufferet.))
|
||||
|
||||
Kommandoer som vil ha argumenter fra brukeren leser inn disse via
|
||||
minibufferet. For eksempel må find-file vite hvilken fil som skal
|
||||
åpnes.
|
||||
|
||||
Iblant kommer det også nyttige meldinger i minibufferet. For eksempel
|
||||
får vi en bekreftende melding der når en fil er lagret.
|
||||
|
||||
Når vi holder på å skrive inn en tastekombinasjon vises det vi har
|
||||
skrevet så langt i minibufferet. Hvis vi for eksempel tar en pause
|
||||
mitt i inntastingen av `C-x C-s' ser vi at `C-x-' vises.
|
||||
|
||||
|
||||
|
||||
((Hjelp!))
|
||||
|
||||
Emacs er flink til å svare hvis man spør om hjelp.
|
||||
|
||||
Hjelpekommandoene er bundet til tastekombinasjoner som begynner med `C-h'.
|
||||
|
||||
De to nyttigste:
|
||||
|
||||
`C-h t' (help-with-tutorial): Emacs-tutorialen. Fint sted å starte.
|
||||
|
||||
`C-h k' (describe-key): Spør om hva en tast gjør. (Prøv dette, for
|
||||
eksempel med `C-x C-s').
|
||||
|
||||
|
||||
|
||||
((Mer hjelp.))
|
||||
|
||||
`C-h f' (describe-function): Spør om hva en funksjon gjør. (Prøv
|
||||
dette, for eksempel med find-file).
|
||||
|
||||
`C-h w' (where-is): Spør om hvilken tast en kommando er bundet til.
|
||||
(Prøv dette, for eksempel med find-file).
|
||||
|
||||
`C-h a' (apropos-command): Søk etter kommando.
|
||||
|
||||
|
||||
|
||||
((Info.))
|
||||
|
||||
Emacs har en innebygd leser for dokumentasjon i info-format.
|
||||
|
||||
Tilfeldigvis er Emacs-manualen skrevet i info.
|
||||
|
||||
`C-h i' (info): Start info-leseren.
|
||||
|
||||
I info kan man si `mEmacs' for å åpne Emacs-manualen.
|
||||
|
||||
|
||||
|
||||
((Stopp! Stopp!))
|
||||
|
||||
Noen ganger har man lyst til å avbryte det Emacs holder på med.
|
||||
|
||||
For eksempel har vi trykket `C-x C-f' (find-file), og Emacs ber om et
|
||||
filnavn, men vi finner ut at vi ikke ville åpne en fil allikevel. Vi
|
||||
har et kjempeproblem!
|
||||
|
||||
Heldigvis finnes det en redning. Den heter `C-g' (keyboard-quit), og
|
||||
er meget anvendelig.
|
||||
|
||||
|
||||
|
||||
((Stopp! Stopp! (forts.)))
|
||||
|
||||
Så:
|
||||
|
||||
* Hvis du vil avbryte tastekombinasjonen du er i ferd med å skrive,
|
||||
|
||||
* hvis Emacs ber om noe i minibufferet og du bare vil få det vekk,
|
||||
|
||||
* hvis Emacs bruker altfor lang tid på å kjøre en kommando,
|
||||
|
||||
* hvis du har trykket på noe rart og det skjer skumle ting,
|
||||
|
||||
* hvis du bare vil forsikre deg om at Emacs ikke driver med noe
|
||||
muffens;
|
||||
|
||||
* * * trykk `C-g'! * * *
|
||||
|
||||
|
||||
|
||||
((Sammendrag; det viktigste vi har lært til nå.))
|
||||
|
||||
Dette er de to tastekombinasjonene man må huske:
|
||||
|
||||
`C-g' (keyboard-quit): Avbryt det som skjer.
|
||||
|
||||
`C-h k' (describe-key): Vis hva en tastekombinasjon gjør.
|
||||
|
||||
Alt annet kan glemmes. Man kan alltid bruke `C-h k' når man for
|
||||
eksempel er usikker på om `C-d' er bundet til delete-char eller til
|
||||
destroy-universe-and-reboot, og man kan (ofte) redde dagen med `C-g'
|
||||
når man har tabbet seg ut.
|
||||
|
||||
|
||||
|
||||
((Tekstredigering.))
|
||||
|
||||
Point er stedet i teksten der den blinkende (eller ikke blinkende)
|
||||
firkanten er. Vi kan flytte point med piltaster eller
|
||||
|
||||
`C-p' (previous-line)
|
||||
|
||||
`C-b' (backward-char) `C-f' (forward-char)
|
||||
|
||||
`C-n' (next-line)
|
||||
|
||||
Mark er en annen posisjon i teksten. Den blir værende hvor den er
|
||||
selv om vi flytter point. Vi kan sette mark til der point er med
|
||||
`C-SPC' (set-mark-command).
|
||||
|
||||
Regionen er området mellom point og mark. Mange redigeringskommandoer
|
||||
opererer på regionen.
|
||||
|
||||
Hvis transient-mark-mode er på vises regionen med bakgrunnsfarge.
|
||||
|
||||
|
||||
|
||||
((Drap og gjenoppliving.))
|
||||
|
||||
`C-w' (kill-region): Drep teksten i regionen. Død tekst blir borte
|
||||
fra bufferet, men kan gjenopplives senere på andre steder.
|
||||
(«cut»).
|
||||
|
||||
`C-y' (yank): Sett inn den forrige teksten som ble drept.
|
||||
(«paste»).
|
||||
|
||||
`M-w' (kill-ring-save): Som kill-region, men teksten blir ikke borte.
|
||||
(«copy»).
|
||||
|
||||
`C-k' (kill-line): Drep teksten fra point til slutten på linjen.
|
||||
|
||||
|
||||
|
||||
((Kill ring.))
|
||||
|
||||
Drept tekst legges i «kill ring»-en. Denne inneholder all teksten som
|
||||
er blitt drept.
|
||||
|
||||
Ved å si `C-y' får vi det som ble drept sist. Hvis vi deretter sier
|
||||
`M-y' (yank-pop) får vi isteden det som ble drept nest sist.
|
||||
|
||||
Ved å gjenta `M-y' kan vi bla gjennom hele kill ringen til vi finner
|
||||
det vi leter etter.
|
||||
|
||||
|
||||
|
||||
((Undo.))
|
||||
|
||||
`C-_' (undo): Reverser siste endring.
|
||||
|
||||
Det å undo-e kan også undo-es. Dette er forvirrende.
|
||||
|
||||
To (eller flere) undo-kall på rad vil fortsette å undo-e ting som ble
|
||||
gjort tidligere, men så snart man har gjort en annen kommando enn undo
|
||||
(for eksempel bare flyttet point) blir undo-operasjonene også ting som
|
||||
kan undo-es. Dette er forvirrende.
|
||||
|
||||
|
||||
|
||||
((Søk.))
|
||||
|
||||
`C-s' (isearch-forward): Søk forover i teksten. Emacs begynner å søke
|
||||
mens vi skriver inn søketeksten, og søkeresultatene oppdateres hele
|
||||
tiden.
|
||||
|
||||
`C-r' (isearch-backward): Søk bakover, som med isearch-forward.
|
||||
|
||||
Mens vi holder på å søke kan vi trykke `C-s' eller `C-r' for å hoppe
|
||||
til neste eller forrige treff.
|
||||
|
||||
|
||||
|
||||
((Søk/erstatt.))
|
||||
|
||||
`M-%' (query-replace): Erstatt en tekststreng med en annen. For hvert
|
||||
treff på søkestrengen (fra point og fremover) kan vi velge mellom
|
||||
`SPC' (erstatt denne og gå til neste) og `n' (hopp til neste uten å
|
||||
erstatte denne), eller `!' for å erstatte alle.
|
||||
|
||||
|
||||
|
||||
((Søk/erstatt med regulære uttrykk.))
|
||||
|
||||
Generell regel: Bruk en ekstra modifikatortast for å gjøre om vanlige
|
||||
søkekommandoer til søkekommandoer som bruker regulære uttrykk.
|
||||
|
||||
`C-M-s' (isearch-forward-regexp).
|
||||
|
||||
`C-M-%' (query-replace-regexp).
|
||||
|
||||
|
||||
|
||||
((Gjenta kommandoer.))
|
||||
|
||||
Vi kan sende et numerisk argument til en kommando ved å si `C-(tall)'
|
||||
foran kommandoen. Mange kommandoer tolker et slikt argument som et
|
||||
antall ganger de skal gjenta seg selv.
|
||||
|
||||
For eksempel kan vi si
|
||||
|
||||
`C-8 C-n' for å gå 8 linjer ned (`C-n' er next-line),
|
||||
|
||||
`C-1 C-2 A' for å skrive AAAAAAAAAAAA,
|
||||
|
||||
`C-3 C-0 C-0 )' for å sette inn 300 sluttparenteser.
|
||||
|
||||
(Det sistnevnte kan være nyttig i lange Lisp-programmer).
|
||||
|
||||
|
||||
|
||||
((Annen bruk av numerisk argument.))
|
||||
|
||||
Enkelte kommandoer tolker det numeriske argumentet som noe annet enn
|
||||
et antall ganger de skal gjenta seg selv.
|
||||
|
||||
Et par eksempler:
|
||||
|
||||
`C-l' (recenter-top-bottom) skroller slik at linjen vi står på kommer
|
||||
midt i, øverst, eller nederst i vinduet (avhengig av hvor mange ganger
|
||||
man har trykket på den). Med numerisk argument gjør den noe annet:
|
||||
argumentet tolkes som hvor langt ned i vinduet linjen skal vises.
|
||||
|
||||
`C-0 C-l': vis linjen vi står på øverst
|
||||
`C-5 C-l': vis linjen vi står på som sjette linje
|
||||
`C-- C-2 C-l': vis linjen vi står på som den andre nedenfra
|
||||
|
||||
`C-v' (scroll-up) flytter teksten opp én skjerm (dette er ellers kjent
|
||||
som «page down»). Med numerisk argument flytter den isteden teksten
|
||||
opp så mange linjer som argumentet sier.
|
||||
|
||||
|
||||
|
||||
((Buffere.))
|
||||
|
||||
Teksten vi redigerer i Emacs lever i et buffer.
|
||||
|
||||
Emacs har ett buffer for hver åpen fil, pluss noen spesielle buffere
|
||||
som ikke har noen fil knyttet til seg.
|
||||
|
||||
Vi kan skifte hvilket buffer som vises med kommandoen `C-x b'
|
||||
(switch-to-buffer).
|
||||
|
||||
Vi kan trykke `C-x C-b' for å få et nytt buffer med en liste over alle
|
||||
bufrene.
|
||||
|
||||
|
||||
|
||||
((Modi.))
|
||||
|
||||
Hvert buffer har en modus. Modusen bestemmer hvordan teksten vises og
|
||||
hva de forskjellige tastene gjør.
|
||||
|
||||
Det finnes tre hovedtyper modi:
|
||||
|
||||
(1) Modi for tekst, for eksempel rene tekstfiler, HTML eller TeX.
|
||||
|
||||
(2) Modi for programmering, en for hvert språk (C, Lisp, Python, Perl etc).
|
||||
|
||||
(3) Modi for spesielle bufre som ikke redigeres. For eksempel er det
|
||||
egne modi for bufrene med hjelpeinformasjon (fra `C-h k' e.l.)
|
||||
bufferliste (fra `C-x C-b') etc.
|
||||
|
||||
|
||||
|
||||
((Primær- og sekundærmodi.))
|
||||
|
||||
Modiene vi beskrev over kalles primærmodi (engelsk: major modes).
|
||||
|
||||
Et buffer har til enhver tid eksakt en primærmodus.
|
||||
|
||||
Det finnes også sekundærmodi (engelsk: minor modes). Hvert buffer kan
|
||||
ha vilkårlig mange (0 eller flere) sekundærmodi.
|
||||
|
||||
Primærmodusen er knyttet til hva slags tekst som er i bufferet og
|
||||
hvordan den skal behandles. Sekundærmodi er små (eller store)
|
||||
«features» som kan skrus av og på.
|
||||
|
||||
|
||||
|
||||
((Noen sekundærmodi.))
|
||||
|
||||
* column-number-mode: Vis kolonnenummer
|
||||
|
||||
* linum-mode: Viser linjenummer foran hver linje.
|
||||
|
||||
* flyspell-mode: Automatisk stavekontroll.
|
||||
|
||||
`C-h i mEmacs mMinor Modes'
|
||||
|
||||
|
||||
|
||||
((Moduslinjen.))
|
||||
|
||||
Den nest nederste linjen kalles moduslinjen og inneholder mye
|
||||
spennende informasjon om bufferet som vises.
|
||||
|
||||
-CS:CH- BUF POS LINE (MAJOR MINOR)------
|
||||
|
||||
BUF: bufferets navn
|
||||
|
||||
POS: hvor i bufferet vi er (Top/Bot/nn%).
|
||||
|
||||
LINE: linjenummeret point er på
|
||||
|
||||
MAJOR MINOR: modiene til bufferet
|
||||
|
||||
CS (ett tegn) beskriver tegnkodingen for bufferet:
|
||||
|
||||
'-': ingen spesiell tegnkoding
|
||||
'U': UTF-8
|
||||
'1': Latin-1
|
||||
|
||||
CH (to tegn) beskriver hvorvidt bufferet kan endres og/eller er
|
||||
endret:
|
||||
|
||||
'--': kan endres, ikke endret siden forrige lagring
|
||||
'**': kan endres og er endret siden forrige lagring
|
||||
'%%': kan ikke endres (read-only)
|
||||
'%*': kan ikke endres, men er endret allikevel
|
||||
|
||||
|
||||
|
||||
((Eksempel på moduslinje.))
|
||||
|
||||
-U:**- emacs-kurs.txt 58% L418 (Text)-------
|
||||
|
||||
Dette betyr at:
|
||||
|
||||
* vi er på linje 418 i bufferet emacs-kurs.txt.
|
||||
* omtrent 58% av bufferet er over det vi ser.
|
||||
* bufferet bruker primærmodusen Text.
|
||||
* bufferet kodes i UTF-8.
|
||||
* bufferet er endret siden forrige lagring.
|
||||
|
||||
|
||||
|
||||
((Vinduer.))
|
||||
|
||||
Vi kan splitte opp skjermen i vinduer og vise ett buffer i hvert
|
||||
vindu.
|
||||
|
||||
`C-x 2' (split-window-vertically): Lag to vinduer under hverandre.
|
||||
|
||||
`C-x 3' (split-window-horizontally): Lag to vinduer ved siden av
|
||||
hverandre.
|
||||
|
||||
`C-x o' (other-window): Hopp til det andre vinduet (eller det neste,
|
||||
hvis det er flere enn to).
|
||||
|
||||
`C-x 0' (delete-window): Fjern dette vinduet.
|
||||
|
||||
`C-x 1' (delete-other-windows): Fjern alle de andre vinduene.
|
||||
|
||||
|
||||
|
||||
((Modi for tekst.))
|
||||
|
||||
.txt-filer åpnes i text-mode. Kommandoene som brukes her kan også
|
||||
brukes i modi for HTML og LaTeX, og mange av dem kan brukes i
|
||||
programmeringsmodi også.
|
||||
|
||||
Emacs antar at man bruker punktum og to mellomrom for å separere
|
||||
setninger, og to linjeskift for å separere avsnitt.
|
||||
|
||||
|
||||
|
||||
((Tekstmoduskommandoer.))
|
||||
|
||||
Man kan operere på ord, setninger og avsnitt:
|
||||
|
||||
`M-f' (forward-word), `M-b' (backward-word), `M-d' (kill-word).
|
||||
|
||||
`M-t' (transpose-words): bytter ord om to.
|
||||
|
||||
`M-a' (backward-sentence), `M-e' (forward-sentence), `M-k' (kill-sentence).
|
||||
|
||||
`M-{' (backward-paragraph), `M-}' (forward-paragraph),
|
||||
`M-h' (mark-paragraph).
|
||||
|
||||
|
||||
|
||||
((Flere tekstmoduskommandoer.))
|
||||
|
||||
`M-q' (fill-paragraph): Bryt om linjene slik at dette avsnittet får
|
||||
passe lange linjer. En meget praktisk kommando.
|
||||
|
||||
`C-x C-l' (downcase-region): gjør alle bokstavene i regionen små.
|
||||
|
||||
`C-x C-u' (upcase-region): GJØR ALLE BOKSTAVENE I REGIONEN STORE.
|
||||
|
||||
|
||||
|
||||
((ASCII-tabeller.))
|
||||
|
||||
`M-x table-insert'
|
||||
|
||||
+---+---+---+
|
||||
|foo|bar|baz|
|
||||
+---+---+---+
|
||||
|3 |4 |5 |
|
||||
+---+---+---+
|
||||
|
||||
Endre cellebredde: `C-<', `C->'
|
||||
Endre cellehøyde: `C-{', `C-}'
|
||||
|
||||
|
||||
|
||||
((Programmering.))
|
||||
|
||||
Emacs velger riktig programmeringsmodus etter filendelsen.
|
||||
|
||||
Hvis font-lock-mode er på (skriv (global-font-lock-mode 1) i .emacs
|
||||
for å skru den på) får man mange fine farger.
|
||||
|
||||
Fra manualen:
|
||||
|
||||
The existing programming language major modes include Lisp, Scheme (a
|
||||
variant of Lisp) and the Scheme-based DSSSL expression language, Ada,
|
||||
ASM, AWK, C, C++, Delphi (Object Pascal), Fortran, Icon, IDL (CORBA),
|
||||
IDLWAVE, Java, Metafont (TeX's companion for font creation), Modula2,
|
||||
Objective-C, Octave, Pascal, Perl, Pike, PostScript, Prolog, Python,
|
||||
Ruby, Simula, Tcl, and VHDL. An alternative mode for Perl is called
|
||||
CPerl mode. Modes are available for the scripting languages of the
|
||||
common GNU and Unix shells, VMS DCL, and MS-DOS/MS-Windows `BAT'
|
||||
files. There are also major modes for editing makefiles, DNS master
|
||||
files, and various sorts of configuration files.
|
||||
|
||||
|
||||
|
||||
((Indentering.))
|
||||
|
||||
`TAB' (c-indent-command, lisp-indent-line etc): Fiks innrykket til
|
||||
linjen point er på. Fungerer uansett hvor på linjen man er og om den
|
||||
allerede er rykket inn riktig.
|
||||
|
||||
`C-M-\' (indent-region): Fiks innrykket til alle linjene i regionen.
|
||||
|
||||
For å fikse indenteringen i hele bufferet: `C-x h C-M-\'.
|
||||
(`C-x h' er mark-whole-buffer).
|
||||
|
||||
`C-j' (newline-and-indent): Lag en ny linje og rykk inn passe mye.
|
||||
|
||||
|
||||
|
||||
((Kompilering, debugging.))
|
||||
|
||||
`M-x compile': Kjører make i den nåværende katalogen.
|
||||
|
||||
`M-x gdb': Start gdb.
|
||||
|
||||
|
||||
|
||||
((SLIME.))
|
||||
|
||||
SLIME: Superior Lisp Interaction Mode for Emacs.
|
||||
|
||||
SLIME forandrer Emacs fra en fantastisk editor til et fantastisk
|
||||
utviklingsmiljø for Common Lisp.
|
||||
|
||||
Vi får innebygd dokumentasjon av funksjoner og variabler, et REPL vi
|
||||
kan kommunisere med, direktelinker til Hyperspecen, en vakker
|
||||
animasjon og mye annet fint.
|
||||
|
||||
For å starte herligheten: `M-x slime'
|
||||
|
||||
(Installer først pakken 'slime', samt en Common Lisp-implementasjon
|
||||
hvis du ikke allerede har det.)
|
||||
|
||||
|
||||
|
||||
((Tastemakroer.))
|
||||
|
||||
Noen ganger har vi lyst til å gjenta den samme sekvensen med taster
|
||||
flere ganger. Da kan vi ta den opp og spille den av.
|
||||
|
||||
`C-x (' (kmacro-start-macro): Begynn å ta opp makro.
|
||||
|
||||
`C-x )' (kmacro-end-macro): Avslutt opptak.
|
||||
|
||||
`C-x e' (kmacro-end-and-call-macro): Kjør makroen.
|
||||
|
||||
Etter `C-x e' kan vi hakke på `e' for å gjenta makroen vilkårlig mange
|
||||
ganger.
|
||||
|
||||
|
||||
|
||||
((Ymse praktiske ting: Åpne filer via SSH.))
|
||||
|
||||
Når vi bruker `C-x C-f' (find-file) kan vi skrive
|
||||
|
||||
/ssh:maskin:fil
|
||||
|
||||
istedenfor en lokal fil.
|
||||
|
||||
|
||||
|
||||
((Ymse praktiske ting: Bokmerker.))
|
||||
|
||||
`C-x r m mjau <RET>': Sett bokmerket «mjau» her.
|
||||
`C-x r b mjau <RET>': Hopp til bokmerket «mjau».
|
||||
`C-x r l': Vis alle bokmerkene.
|
||||
`M-x bookmark-save': Lagre bokmerkene.
|
||||
|
||||
|
||||
|
||||
((Emacs har alt.))
|
||||
|
||||
A novice of the temple once approached the Master Programmer with a
|
||||
question: "Master, does Emacs have the Buddha nature?" the novice
|
||||
asked.
|
||||
|
||||
The Master Programmer had been in the temple for many years and
|
||||
could be relied upon to know these things. He thought for several
|
||||
minutes before replying: "I don't see why not. It's bloody well got
|
||||
everything else."
|
||||
|
||||
|
||||
|
||||
((Emacs har alt (forts.)))
|
||||
|
||||
* dired: Katalogeditor.
|
||||
|
||||
* calendar: Kalender.
|
||||
|
||||
* calc: Meget avansert RPN-kalkulator.
|
||||
|
||||
* shell: Kjør et eksternt skall (f.eks. bash).
|
||||
|
||||
* eshell: Skall skrevet i elisp.
|
||||
|
||||
* Gnus: Usenet- og epost-klient.
|
||||
|
||||
* ERC: IRC-klient.
|
||||
|
||||
|
||||
|
||||
((Emacs har alt, inkludert spill og annet fjas.))
|
||||
|
||||
* tetris
|
||||
|
||||
* doctor
|
||||
|
||||
* life
|
||||
|
||||
* dunnet
|
||||
|
||||
|
||||
|
||||
((Konfigurering og utvidelser.))
|
||||
|
||||
For å konfigurere Emacs: Skriv elisp-kode i ~/.emacs
|
||||
|
||||
For å utvide Emacs: Skriv elisp-kode i ~/.emacs
|
||||
|
||||
(Større utvidelser bør plasseres i egne filer, med endelse .el).
|
||||
|
||||
|
||||
|
||||
((Dått emacs.))
|
||||
|
||||
Vi kan konfigurere Emacs ved å sette variabler, kalle funksjoner som
|
||||
gjør spennende ting, definere egne funksjoner, binde taster til
|
||||
funksjoner etc.
|
||||
|
||||
Noen eksempler:
|
||||
|
||||
;; forteller SLIME hvor lispen vi vil bruke bor:
|
||||
(setq inferior-lisp-program "/usr/bin/sbcl")
|
||||
|
||||
;; skrur på font-lock-mode (fine farger):
|
||||
(global-font-lock-mode 1)
|
||||
|
||||
;; Binder taster til kommandoer jeg liker:
|
||||
(global-set-key (kbd "C-M-y") 'clipboard-yank)
|
||||
(global-set-key (kbd "C-M-<") 'bs-cycle-previous)
|
||||
(global-set-key (kbd "C-M-z") 'bs-cycle-next)
|
||||
|
||||
|
||||
|
||||
((Elisp.))
|
||||
|
||||
Emacs Lisp (elisp) er en Lisp-dialekt. Den er litt gammeldags og rar
|
||||
(blant annet har den ikke leksikalsk skop), men for øvrig et meget
|
||||
godt språk å skrive teksteditorer i.
|
||||
|
||||
*scratch*-bufferet fungerer som en REPL: Trykk `C-j' på slutten av en
|
||||
linje for å evaluere den.
|
||||
|
||||
Vi kan også (i *scratch* og andre elisp-bufre) si `C-M-x' for å
|
||||
evaluere toppnivåuttrykket rundt point. For å laste inn en hel fil,
|
||||
bruk `M-x load-file'.
|
||||
|
||||
Sammen med den innebygde hjelpefunksjonaliteten (`C-h k', `C-h f' med
|
||||
venner) gjør dette Emacs til et utmerket utviklingsmiljø for
|
||||
elisp-kode.
|
||||
|
||||
|
||||
|
||||
((Eksempel på elisp-kode))
|
||||
|
||||
kill-ring.el
|
||||
|
||||
|
||||
|
||||
slutt.
|
25
kill-ring.el
Normal file
25
kill-ring.el
Normal file
@ -0,0 +1,25 @@
|
||||
;; Eksempel på elisp-kode.
|
||||
|
||||
(defun show-kill-ring ()
|
||||
"Shows the contents of the kill ring in another window."
|
||||
(interactive)
|
||||
(let ((buf (get-buffer-create "*kill ring*"))
|
||||
(i 0))
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(delete-region (point-min) (point-max))
|
||||
(dolist (item kill-ring)
|
||||
(setq i (1+ i))
|
||||
(insert (format "%d: %s\n" i
|
||||
(replace-regexp-in-string
|
||||
"\n" "\\\\n"
|
||||
(cut-string item 70 "..."))))))
|
||||
(display-buffer buf)))
|
||||
|
||||
(defun cut-string (str len ellipsis)
|
||||
(if (> (length str) len)
|
||||
(concat (substring str 0 (- len (length ellipsis)))
|
||||
ellipsis)
|
||||
str))
|
||||
|
||||
(global-set-key (kbd "C-x C-y") 'show-kill-ring)
|
137
kurs.el
Normal file
137
kurs.el
Normal file
@ -0,0 +1,137 @@
|
||||
;; Modus for Emacs-kurs.
|
||||
|
||||
;; Last inn denne filen med `M-x load-file <RET>' og si `M-x
|
||||
;; kurs-mode' i emacs-kurs.txt.
|
||||
|
||||
(defface kurs-overskrift-face
|
||||
`((((type tty) (class color))
|
||||
(:foreground "blue"))
|
||||
(((type tty) (class mono))
|
||||
(:inverse-video t))
|
||||
(((class color) (background dark))
|
||||
(:foreground "lightblue" :weight bold :height 200))
|
||||
(((class color) (background light))
|
||||
(:foreground "darkblue" :weight bold :height 200))
|
||||
(t (:foreground "blue" :weight bold :height 200)))
|
||||
"Kurs-overskrift")
|
||||
|
||||
(defvar kurs-tittel "kurs")
|
||||
|
||||
(defvar kurs-mode-map nil)
|
||||
(setq kurs-mode-map (make-sparse-keymap))
|
||||
(define-key kurs-mode-map " " 'kurs-neste-side)
|
||||
(define-key kurs-mode-map "n" 'kurs-neste-side)
|
||||
(define-key kurs-mode-map "p" 'kurs-forrige-side)
|
||||
(define-key kurs-mode-map (kbd "<DEL>") 'kurs-forrige-side)
|
||||
(define-key kurs-mode-map "g" 'kurs-hopp)
|
||||
(define-key kurs-mode-map "<" 'kurs-topp)
|
||||
(define-key kurs-mode-map ">" 'kurs-bunn)
|
||||
(define-key kurs-mode-map "\M-?" 'kurs-info)
|
||||
|
||||
(defun kurs-neste-side (&optional arg)
|
||||
"Gå til neste side i kurset.
|
||||
Med prefiksargument N, gå N sider forover."
|
||||
(interactive "p")
|
||||
(when (> (point) (point-min))
|
||||
;; avoid moving two pages when point is at end of page
|
||||
(backward-char))
|
||||
(widen)
|
||||
(forward-page arg)
|
||||
(narrow-to-page))
|
||||
|
||||
(defun kurs-forrige-side (&optional arg)
|
||||
"Gå til forrige side i kurset.
|
||||
Med prefiksargument N, gå N sider bakover."
|
||||
(interactive "p")
|
||||
(widen)
|
||||
(backward-page)
|
||||
(backward-page arg)
|
||||
(narrow-to-page))
|
||||
|
||||
(defun kurs-topp ()
|
||||
"Gå til første side."
|
||||
(interactive)
|
||||
(widen)
|
||||
(goto-char (point-min))
|
||||
(narrow-to-page))
|
||||
|
||||
(defun kurs-bunn ()
|
||||
"Gå til siste side."
|
||||
(interactive)
|
||||
(widen)
|
||||
(goto-char (point-max))
|
||||
(narrow-to-page))
|
||||
|
||||
(defun kurs-sidenr ()
|
||||
"Returnerer nåværende sidenummer."
|
||||
(save-restriction
|
||||
(widen)
|
||||
(save-excursion
|
||||
(let ((sidenr 1)
|
||||
(pt (point)))
|
||||
(goto-char 1)
|
||||
(while (re-search-forward page-delimiter pt t)
|
||||
(setq sidenr (1+ sidenr)))
|
||||
sidenr))))
|
||||
|
||||
(defun kurs-antall-sider ()
|
||||
"Returnerer antall sider i bufferet."
|
||||
(save-restriction
|
||||
(widen)
|
||||
(save-excursion
|
||||
(goto-char (point-max))
|
||||
(kurs-sidenr))))
|
||||
|
||||
(defun kurs-hopp (n)
|
||||
"Gå til en bestemt side."
|
||||
(interactive "nHopp til side: ")
|
||||
(let ((hopp-pt
|
||||
(save-restriction
|
||||
(widen)
|
||||
(save-excursion
|
||||
(let ((sidenr 1)
|
||||
(pt (point)))
|
||||
(goto-char 1)
|
||||
(while (and (< sidenr n)
|
||||
(re-search-forward page-delimiter))
|
||||
(setq sidenr (1+ sidenr)))
|
||||
(point))))))
|
||||
(widen)
|
||||
(goto-char hopp-pt)
|
||||
(narrow-to-page)))
|
||||
|
||||
(defun kurs-info ()
|
||||
"Vis nåværende sidenummer og antall sider."
|
||||
(interactive)
|
||||
(message "Side %d av %d" (kurs-sidenr) (kurs-antall-sider)))
|
||||
|
||||
(setq kurs-mode-font-lock-keywords
|
||||
'(("^((.*))$" . 'kurs-overskrift-face)))
|
||||
|
||||
(defun kurs-finn-tittel ()
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(search-forward-regexp "((\\(.*\\)))")
|
||||
(buffer-substring-no-properties
|
||||
(match-beginning 1)
|
||||
(match-end 1))))
|
||||
|
||||
(define-derived-mode kurs-mode fundamental-mode "kurs"
|
||||
"Durmodus for Emacs-kurs.
|
||||
|
||||
Begrenser vist tekst til én side av gangen. Bruk `n' og `p' for
|
||||
å skifte side. For å se alle sidene, si `C-x n w' (widen). Bruk
|
||||
`M-?' for å finne ut hvor i filen du er."
|
||||
(setq mode-name "kurs")
|
||||
(setq font-lock-defaults '(kurs-mode-font-lock-keywords))
|
||||
(make-local-variable 'kurs-tittel)
|
||||
(setq kurs-tittel (kurs-finn-tittel))
|
||||
(setq header-line-format
|
||||
'((:eval kurs-tittel)
|
||||
": side "
|
||||
(:eval (number-to-string (kurs-sidenr)))
|
||||
" av "
|
||||
(:eval (number-to-string (kurs-antall-sider)))))
|
||||
(narrow-to-page))
|
||||
|
||||
(provide 'kurs-mode)
|
Loading…
x
Reference in New Issue
Block a user