#+TITLE: Emacskurs #+EMAIL: larstvei@ifi.uio.no #+GITHUB: http://github.com/larstvei #+OPTIONS: num:nil toc:nil \n:1 #+BEAMER_THEME: Rochester #+REVEAL_TRANS: linear #+REVEAL_THEME: night #+REVEAL_THEME: moon #+REVEAL_SPEED: fast #+REVEAL_HLEVEL: 1 * Plan for kurset #+ATTR_REVEAL: :frag roll-in - Før pause: - Liten demonstrasjon av hvordan man kommer igang med Emacs på Ifi's maskiner - Snakk om hva Emacs er - Gå raskt gjennom foilene og dekker «basics» - Etter pause: - Mer praktiske eksempler. - Vise hvordan Org-mode fungerer, og hva det kan brukes til - Tar imot alt av spørsmål fra salen! * Hva er Emacs? #+ATTR_REVEAL: :frag roll-in - Teksteditor - Utvidbar (Emacs Lisp) - Over 30 år gammel - Over 2500 innebygde kommandoer - Fri programvare * Rammer, vinduer og buffere #+ATTR_REVEAL: :frag roll-in - Emacs åpnes i en ramme - Man kan ha flere vinduer i samme ramme - Tekst vises i buffere - Du kan ha så mange åpne buffere du vil - En fil åpnes i et nytt buffer - Minibufferet (nederste linje), brukes til å skrive inn filnavn, buffernavn, etc... * Modes #+ATTR_REVEAL: :frag roll-in - Major modes - hvert buffer har kun én aktiv major mode - en major mode gir deg funksjonalitet for en bestemt type tekstredigering - de fleste programmeringsspråk har sin egen major mode - Minor modes - du kan ha så mange aktive minor modes du ønsker - en minor mode tilbyr tilleggsfunksjonalitet - Modes tilføyer ofte egne tastekombinasjoner! * Tips #+ATTR_REVEAL: :frag roll-in - Emacs er annerledes å bruke enn mange andre programmer, så det krever tilvenning. - i begynnelsen: - les og gjør «learn-by-doing tutorial» (=C-h t=) - tving deg selv til å bruke de kommandoene du lærer til de sitter i fingrene - unngå «pek og klikk» - etter hvert (for spesielt interesserte): - skriv din egen config-fil - lær litt Emacs lisp, og skriv dine egne funksjoner - gjør =CAPS-LOCK= om til en ekstra Control (=Ctrl=) * Terminologi for taster #+ATTR_REVEAL: :frag roll-in - =C-= Control - =M-= Meta er =Alt= på de fleste maskiner (alternativt =ESC=) - == betyr et vilkårlig tegn (eller tastekombinasjon) * Prefikstaster #+ATTR_REVEAL: :frag roll-in - =C-x = prefiks for globale kommandoer - =C-c = prefiks for lokale kommandoer (har ikke alltid samme funksjon!) - =C-h = prefiks for hjelp - Alle tastekombinasjoner som ikke er en prefiks er enten bundet til en kommando eller udefinert. * Komme seg ut #+ATTR_REVEAL: :frag roll-in - =C-x C-c= avslutt Emacs - =C-g= avbryt (bruk hvis du ikke skjønner hva Emacs holder på med!) - =ESC ESC ESC= (bruk hvis =C-g= ikke hjalp) - =C- C-g= er udefinert (Dvs. =C-g= kan brukes til å avbryte prefiks) * Tekstredigering #+ATTR_REVEAL: :frag roll-in - =C-f=, =C-b= flytt markøren ett tegn frem/tilbake - =M-f=, =M-b= flytt markøren ett ord frem/tilbake - =C-a=, =C-e= flytt markøren til begynnelsen/slutten av linja - =C-p=, =C-n= flytt markøren til forrige/neste linje * Bla rundt #+ATTR_REVEAL: :frag roll-in - =C-v=, =M-v= scroll ned/opp en side - =M-<=, =M->= gå til begynnelsen/slutten av bufferet - =C-l= vis slik at markøren er i senter/toppen/bunnen * Kill og yank #+ATTR_REVEAL: :frag roll-in - =C-w= kill, tilsvarer cut - =C-y= yank, tilsvarer paste - =M-w= lagre til kill-ring, tilsvarer copy - =C-k= kill, drepe resten av en linje - =M-y=, må etterfølges av =C-y= yank-pop, går lenger tilbake på kill-ring * Feiloppretting #+ATTR_REVEAL: :frag roll-in - =C-d=, =M-d= fjern neste bokstav/ord - =C-_=, =C-/=, =C-x u= undo! - =C-t=, =M-t= bytt om to bokstaver/ord - =C-x C-t= bytt om to linjer - =M-q= plasserer om tekst i en paragraf slik at linjene ikke overstiger 70 tegn (den ødelegger ikke syntaks i programmeringmodes) - =M-u=, =M-l=, =M-c= gjør neste ord til UPPERCASE/lowercase/Capital-Case * Markering av tekst #+ATTR_REVEAL: :frag roll-in - =C-SPC= markerer tekst - =C-x h= markerer all tekst - =M-h= markerer en paragraf - Bruk i kombinasjon med =M-w=, =C-w= og =TAB= * Filer #+ATTR_REVEAL: :frag roll-in - =C-x C-f= åpne fil (hvis den ikke finnes fra før åpnes et tomt buffer med det nye filnavnet) - =C-x C-s= lagre buffer - =C-x C-w= skrive til fil (tilsvarende «lagre som...») * Vinduer #+ATTR_REVEAL: :frag roll-in - =C-x 2=, =C-x 3= splitt et vindu horisontalt/vertikalt - =C-x 1= gjør det aktive vinduet til det eneste vinduet - =C-x 0= lukk det aktive vinduet - =C-x o= bytt fokus til et annet vindu * Buffere #+ATTR_REVEAL: :frag roll-in - =C-x b RET= bytt buffer (siste besøkte buffer er default) - =C-x k RET= drep (kill) buffer (det aktive bufferet er default) - =C-x left=, =C-x right= en annen måte å bytter buffer på * Kommandoer #+ATTR_REVEAL: :frag roll-in - =M-x function RET= lar deg kalle en vilkårlig kommando med navn - =M-x replace-string RET erstatt RET med RET= tilsvarer «search and replace» - =M-x query-replace RET erstatt RET med RET= ... =y/n= samme som replace-string, men du kan velge hva som skal erstattes (kan også kjøres med =M-%=!) - Bruk =TAB= for autocomplete! * Søking #+ATTR_REVEAL: :frag roll-in - =C-s= søk fremover i bufferet - =C-r= søk bakover i bufferet - Dette er en /svært/ effektiv måte å flytte markøren på! * Hjelp til selvhjelp #+ATTR_REVEAL: :frag roll-in - =C-h k= bruk hvis du lurer på hva en tastekombinasjon gjør - =C-h f= bruk hvis du kjenner navnet på en funksjon, men ikke vet hva den gjør - =C-h m= gir deg informasjon om moden du er i (bl.a. tastekombinasjoner som er spesielle for moden) - =C-h a= apropos, lar deg søke i hjelpen - =C-h C-h= (eller: =C-h ?=) gir deg hjelp om hjelpen * Programmering #+ATTR_REVEAL: :frag roll-in - =TAB= indenterer riktig (dersom indenteringen er gal er det et tegn på at det er noe galt i koden!) - =M-;= kommenterer ut et markert område - =M-x compile RET compile-command RET= lar deg kompilere i Emacs (gir trykkbare linker til der feil oppstod) - =M-g g RET= flytter markøren til linjenummer == * Makroer #+ATTR_REVEAL: :frag roll-in - Makroer er en måte å "ta opp" en rekke kommandoer på - =C-x (= definer en makro - == definer en makro /eller/ sett inn løpenummer - =C-x )=, == ferdigstill makroen - =C-x e= utfør makroen - =e= gjenta makroen * Pakker #+ATTR_REVEAL: :frag roll-in - Emacs 24 kommer med innebygd pakkebehandler - det finnes tusenvis av pakker - =M-x list-packages= bla gjennom pakker - =i= installere - =U= oppgrader alle - =d= slett - =x= utfør installering/oppgradering/sletting * Anbefalinger #+ATTR_REVEAL: :frag roll-in - [[https://github.com/auto-complete/auto-complete][Auto-Complete]] viser mulige fullføringer - [[https://github.com/emacsmirror/undo-tree][Undo-Tree]] et mer standard undo-system, med trestruktur - [[https://github.com/magnars/multiple-cursors.el][Multiple cursors]] ([[http://emacsrocks.com/e13.html][demo]]) lar deg kontrollere flere markører samtidig! - [[https://github.com/oneKelvinSmith/monokai-emacs][Monokai]] et fargetema (hentet fra Sublime) * Nyttige lenker #+ATTR_REVEAL: :frag roll-in - [[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]] - [[https://github.com/larstvei/dot-emacs][Min konfigurasjonsfil]] * Spørsmål? #+ATTR_REVEAL: :frag roll-in - Noen spørsmål nå? - Kom ned i pausen hvis dere har spørsmål eller ønske for neste time! - Gjerne send mail til [[mailto:larstvei@ifi.uio.no][larstvei@ifi.uio.no]]!