#+TITLE: Emacskurs #+EMAIL: larstvei@ifi.uio.no * Plan for kurset + Introduksjon til bruk av Emacs (ca. 20 minutter) + Se en konfigurasjonsfil vokse frem (ca. 20 minutter) + Pizza! (for de som er påmeldt) + Workshop hvor vi hjelper deg komme i gang med Emacs (ca. 45 minutter) * Hva er Emacs? + Emacs er en teksteditor + Emacs er unikt utvidbar + Emacs er en Emacs Lisp maskin + Emacs er selvdokumenterende + Emacs har over 10000 innebygde kommandoer + Emacs er /fri/ programvare + Emacs er 48 år gammel * Buffere, vinduer og rammer + Tekst lagres i /buffere/ + Filer lastes inn i et buffer + Buffere kan skrives til fil + Et buffere vises i et /vindu/ + En /ramme/ kan inneholde ett eller flere vinduer + I bunnen av hver ramme er det et /minibuffer/ * Modes + /Major/ modes + hvert buffer har nøyaktig é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 + Emacs er annerledes å bruke enn mange andre programmer + 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: + Skriv din egen konfigurasjonsfil + Lær litt Emacs Lisp, og skriv dine egne funksjoner + Gjør =Caps Lock= om til en ekstra =Ctrl= * Terminologi for taster + =C-= + Control + =M-= + Meta er =Alt= på de fleste maskiner (alternativt =ESC=) + == representerer et vilkårlig tegn eller tastekombinasjon * Prefikstaster + =C-x = + Prefiks for globale kommandoer + =C-c = + Prefiks for lokale kommandoer + Kan ha ulik oppførsel i ulike modes + =C-h = + Prefiks for hjelp * Komme seg ut + =C-x C-c= + Avslutt Emacs + =C-g= + Avbryt + Bør spammes når Emacs forvirrer deg + =ESC ESC ESC= + Bruk hvis =C-g= ikke hjalp + = C-g= + Er alltid udefinert + Altså kan =C-g= brukes til å avbryte prefiks * Tekstredigering + =C-f=, =C-b= + Flytt markøren ett tegn frem/tilbake + =M-f=, =M-b= + Flytt markøren ett ord frem/tilbake + =C-M-f=, =C-M-b= + Flytt markøren ett uttrykk 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 + =C-v=, =M-v= + Scroll ned/opp en side + =M-<=, =M->= + Gå til begynnelsen/slutten av bufferet + =C-l= + Juster vertikal visning av markøren til senter/toppen/bunnen * Kill og yank + =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= + Yank-pop, går lenger tilbake på kill-ring * Feiloppretting + =C-d=, =M-d=, =C-M-d= + Fjern neste bokstav/ord/uttrykk + =C-_=, =C-/=, =C-x u= + Undo! + =C-t=, =M-t=, =C-M-t= + Bytt om to bokstaver/ord/uttrykk + =C-x C-t= + Bytt om to linjer + =M-q= + Formaterer avsnitt til en fornuftig linjebredde + =M-u=, =M-l=, =M-c= + Gjør neste ord til UPPERCASE/lowercase/Capital-Case * Markering av tekst + =C-SPC= + Start markering av tekst + =C-x h= + Markerer all tekst + =M-h= + Markerer en paragraf + Bruk i kombinasjon med =M-w=, =C-w= og =TAB= + Undo respekterer den markerte regionen * Filer + =C-x C-f= + Åpne eller opprett fil + =C-x C-s= + Skriv bufferet til fil + =C-x C-w= + Skriv bufferet til en ny fil (tilsvarende «lagre som...») * Vinduer + =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 + =C-x b RET= + Bytt buffer + =C-x k RET= + Drep (kill) buffer + =C-x left=, =C-x right= + En annen måte å bytter buffer på * Kommandoer + =M-x RET= + Lar deg kalle en vilkårlig kommando ved navn + =M-x replace-string RET RET RET= + Tilsvarer «search and replace» + =M-%=, =M-x query-replace RET RET RET= + Som =replace-string= for utvalgte treff + Bruk =y=/=n= for om treffet skal erstattes * Søking + =C-s= + Søk /fremover/ i bufferet + Gjenta =C-s= for neste treff + Avslutt med =RET= + =C-r= + Søk /bakover/ i bufferet + Dette er en /svært/ effektiv måte å flytte markøren på! * Hjelp til selvhjelp + =C-h k= + Bruk hvis du lurer på hva en tastekombinasjon gjør + =C-h f= + Bruk hvis du vil vite hva en funksjon gjør + =C-h v= + Bruk hvis du vil vite hva en variabel er bundet til og brukes til + =C-h m= + Gir deg informasjon om aktive modes + =C-h a= + Apropos lar deg søke i hjelpen + =C-h C-h= (eller: =C-h ?=) + Gir deg hjelp om hjelpen * Programmering + =TAB= + Indenterer riktig + =M-;= + Kommenterer ut på slutten av linjen eller et markert område + =C-x C-;= + Kommenterer ut linjen + =M-x compile RET RET= + Lar deg kjøre en vilkårlig kommando for å kompilere + Gir trykkbare linker til der det oppstod feil + =M-g M-g RET= + Flytter markøren til linjenummer == * Makroer + 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 + Bruk =e= for å gjenta makroen * Pakker + Emacs 29 kommer med innebygd pakkebehandler + Det finnes tusenvis av pakker + =M-x list-packages= + Bla gjennom pakker + =i= Marker for å installere + =U= Marker alle pakker for oppgradering + =d= Marker for sletting + =x= Utfør installering/oppgradering/sletting + Dette bør heller gjøres i konfigurasjonsfilen * Anbefalinger + [[https://github.com/magnars/multiple-cursors.el][Multiple cursors]] ([[http://emacsrocks.com/e13.html][demo]]) + Lar deg kontrollere flere markører samtidig! + [[https://magit.vc/][Magit]] + Det beste grensesnittet til Git + [[https://orgmode.org/][Org mode]] + Et markup språk med fantastisk støtte for + Notater + Publisering + Literate programming + ... masse mer * Nyttige lenker + [[http://www.gnu.org/software/emacs/manual/html_node/emacs/index.html#Top][Emacs-manualen]] + [[https://www.masteringemacs.org/][Mastering Emacs]] + [[https://systemcrafters.net/][System Crafters]] + Noen konfigurasjonsfiler: + [[https://github.com/larstvei/dot-emacs][larstvei]] + [[https://codeberg.org/idun/dotemacs][idun]] + [[https://github.com/SophieBosio/.emacs.d][SophieBosio]] + [[https://github.com/magnars/emacsd-reboot][magnars]] + [[https://github.com/simenheg/.emacs.d][simenheg]] + [[https://github.com/purcell/emacs.d][purcell]] + [[https://github.com/rougier/dotemacs][rougier]]