Kapitel 9. Versionskontroll och Emacs. 9.1 Versionskontroll. 9.1.1 Om flera ändrar samtidigt. Det blir två olika ämnen idag.



Relevanta dokument
Emacs Lathund. Johan Sandén < tor>

Elias Castegren. (Version 1, 2012)

Support Manual HoistLocatel Electronic Locks

Xemacs, första hjälpen!

Introduktion till datormiljön och Python

DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015

Emacs. Eric Elfving Institutionen för Datavetenskap (IDA)

Problem som kan uppkomma vid registrering av ansökan

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

Beijer Electronics AB 2000, MA00336A,

Lösenordsportalen Hosted by UNIT4 For instructions in English, see further down in this document

Preschool Kindergarten

2.1 Installation of driver using Internet Installation of driver from disk... 3

Quick Start Guide Snabbguide

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Filsäkerhet i Windows NT (NTFS)

6 Introduktion till Emacs

Webbregistrering pa kurs och termin

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

UNIX verktyg. Användbara kommandon Fil och informationssökning Tags Versionshanteringssystem

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Michael Q. Jones & Matt B. Pedersen University of Nevada Las Vegas

Kapitel 12. Mer om program Att rapportera buggar och problem make

electiaprotect GSM SEQURITY SYSTEM Vesta EZ Home Application SMART SECURITY SYSTEMS! SVENSKA ios Android

GitHub for Windows och GitShell

Installation av F13 Bråvalla

Filbeskrivningar Eller på särskild CD skiva

How to format the different elements of a page in the CMS :

2.45GHz CF Card Reader User Manual. Version /09/15

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8)

Detta dokument skall ge en kortfattad introduktion till Jasmine installationen vid DSV.

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

Hur man skapa en Wiki.

Subversion. Laboration. Höstterminen 2008 r81. Ronny Kuylenstierna

DD1310 Programmering för OPEN1 LAB1: Laborationer i Python läsåret 2011/2012

Lathund för UNIX och Emacs

Webbreg öppen: 26/ /

Program. Kapitel make Program Interpreterande och kompilerande program

Thesis Production Time plan, preparation and Word templates

Om e-post. Introduktion till Emacs. Att skicka e-post. ÅÄÖåäö i pine. Varför Emacs? Vad är Emacs? Emacs en editor/textbehandlare

E-posthantering med Novell Groupwise WebAccess

[HUR DU ANVÄNDER PAPP] Papp är det program som vi nyttjar för att lotta turneringar och se resultat.

ALVA BC640 Feature Pack

Arbeta med Selected Works en lathund


Lab 7, 48 steg till ett bättre liv i Unix-labbet

Komma igång med 3L Pro Komma igång med 3L. Copyright VITEC FASTIGHETSSYSTEM AB

Version X6 Fler tips

Boiler with heatpump / Värmepumpsberedare

INSTRUKTION FÖR HUR MAN SKAPAR ETT

LEX INSTRUKTION - REPLIKERING

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Versionshantering med Git


Användarhantering Windows 7 I denna laboration kommer vi att skapa nya användare och grupper och titta på hur man hantera dessa.

Scratch Junior. makeandshape.com. by MIT. Gränssnitt Scratch Junior

Skapa en mall för inlämning av skriftliga uppgifter. med hjälp av Open Office Writer

Till assemblersystemet Zuper 80 Assembler krävs en SPECTRAVIDEO 328/318+minst 16K ram extra.

Lab1 inginfo07. Detta dokument innehåller övningar för introduktion till Media-programmets datorsystem (Mac OS X).

Laboration 10: LaTeX. Redovisning. Omgivningen document. Början. Instruktionerna nedan. Repetitionsuppgifter

Guide till RefWorks Skapa ett RefWorks-konto Under Citera och referera > RefWorks Hjälp funktioner i RefWorks Help Tutorial Help

Textbearbetning i skalet och man-sidor

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Ladda upp filer fra n PLC till PC

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

Introduktion till git

Skapa en mall för inlämning av skriftliga uppgifter med hjälp av Microsoft Office Word

Laboration: Grunderna i MATLAB

Nyheterna i AutoCAD MEP 2014

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

Make a speech. How to make the perfect speech. söndag 6 oktober 13

Styrteknik : Funktioner och funktionsblock

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS Konsolfönstret

1 Vad är Versionshantering? 2 Git. 2.1 GitHub

(engelska)

1284_omslag.qxd :13 Sida 1 ECDL START OFFICE 2003 Allmän IT Windows XP Word 2003 Outlook 2003

InstalationGuide. English. MODEL:150NHighGain/30NMiniUSBAdapter

CICS Application Programming. Exercises MONITOR IT-utbildning, Cobolskolan Sverige, B1-1

Exempelsamling Assemblerprogrammering

MySQL - testmiljöer på minuter. Thomas Johansson IT-avdelningen

Styrteknik: Binära tal, talsystem och koder D3:1

INSPIRA. Microsoft. Word 2007 Grunder

Laboration 2, Materials Termodynamik

Skapa en rapport med snygg formatering, rubriker, sidnummer och innehållsförteckning

Objektorienterad programmering i Java I

E-tentavakt - Invigilator

Tentamen PC-teknik 5 p

Installation/start av LOGGER

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Får endast utföras av behörig personal. May only be carried out by authorized electrician

DRAFT. CVS kurs laboration 1 Checka in, ut och uppdatera. Marcus Rejås. 17 november 2002

Quick Guide till Mahara och din Portfolio

Vässa kraven och förbättra samarbetet med hjälp av Behaviour Driven Development Anna Fallqvist Eriksson

Skapa enkäter i EvaSys

kommando -fl argument

Översättning av galleriet. Hjälp till den som vill...

Del 1: Skapa konto i Exchange

Alias 1.0 Rollbaserad inloggning

Skriv ditt sökord i sökrutan och markera rutan för att föreslå ämnesord (Suggest Subject Terms).

Transkript:

Kapitel 9 Versionskontroll och Emacs Det blir två olika ämnen idag. 9.1 Versionskontroll Versionskontrollsystem är system som kan hantera flera olika versioner av dokument. Flera personer kan ändra i dokumenten och det går att få fram vilka tidigare versioner som helst och se vilka ändringar som gjorts när. Det finns flera olika versionskontrollsystem som har olika för- och nackdelar. Ett mycket vanligt är CVS. En fördel med det är just att det används så mycket. I labben ska ni få använda Subversion (SVN) som är ett senare system som är likt CVS men har en del viktiga förbättringar. Några exempel på modernare versionskontrollsystem är Bazaar, Git och Mercurial. Databasen där alla versioner av filerna i ett projekt ligger kallas ett repositorium (repository). Att ta fram filer därifrån kallas att checka ut dessa filer. Då får man en arbetskatalog (working directory) där man kan göra de ändringar man vill. Efter att man gjort en ändring som ska in i projektet så checkar man in den filen igen så hamnar den versionen i repositoriet. Alla versioner som checkats in kan tas fram i efterhand, så man kan be om t. ex. hur en viss version såg ut den 1 april förra året. Ofta går det att nå ett repositorium över nätet så att personer som ska medverka i ett projekt inte behöver ha konto på samma dator. Även om versionskontrollsystem framförallt används för programmering så kan det med fördel användas även i andra sammanhang där flera personer skriver något tillsammans. Figur 9.1: Såna här missöden händer lätt om flera personer kan ändra i samma filer. Även för sådant man skriver själv är det användbart, bland annat för att kunna gå tillbaka till tidigare versioner. 9.1.1 Om flera ändrar samtidigt Om flera personer har skrivrättigheter i samma katalog där de tillsammans sköter några filer blir det lätt olyckor, som i figur 9.1. Att undvika och lösa sådana problem är en av huvudfunktionerna för versionskontrollsystem. I en del versionskontrollsystem så låser man normalt en fil man ska göra ändringar i så att andra inte får göra ändringar samtidigt. 95

9. VERSIONSKONTROLL OCH EMACS I de flesta system nu är det dock oftast inget större problem med samtidiga ändringar. Om en användare gör en ändring i början av en fil samtidigt som en annan ändrar i slutet av samma fil så kan systemet slå ihop dessa ändringar av sig självt. Systemet vet nämligen vilken version av dokumentet som de olika användarna har utgått ifrån. Bara om ändringarna sker på samma ställe behövs hjälp med att reda ut det. Då visar systemet båda versionerna och en människa får reda ut läget. 9.1.2 Grenar (branches) En vanlig lite mer avancerad finess i versionskontroll (som ni inte kommer att använda i labben) är att skapa förgreningar i utvecklingen. Istället för enbart en linjär utveckling mot nyare och nyare versioner kan man även dela utvecklingen i två eller flera grenar med gemensamt ursprung. I programutveckling är detta vanligt för att skilja på olika versioner av ett program. Om man t. ex. har släppt en version 1 och sedan mitt i arbetet på en mycket ändrad version 2 märker av en viktig bugg i version 1 som man borde ändra på, så kan man gå tillbaka till version 1 och knoppa av en gren där man bara gör den ändringen och släppa den fixade versionen där som version 1.1 eller nåt sånt. Det är också vanligt att ändringar som är till för att lägga till någon viss finess knoppas av i en egen gren. Sen när det delprojektet är klart så slås den grenen ihop med huvudgrenen (stammen, trunk). 9.1.3 Kommandon Oftast är det ett enda kommando med vilket man kan göra allt som ett versionskontrollsystem kan göra, genom att ge det olika argument. För CVS heter kommandot cvs och för Subversion heter det svn, och liknande för andra system. Första argumentet till svn är ett underkommando till det. Med svn help får man hjälp. Men Emacs känner igen vilka filer som tas om hand av Subversion och gör mycket av det där automatiskt åt en, eller med kommandon i en meny Tools Version Control. Man kan använda samma kommandon i Emacs oavsett vilket versionskontrollsystem man använder. Emacs känner igen vilket system som har hand om just dina filer. Ibland används förkortningen VC för Version Control, och det ingår i en hel del namn på Emacskommandon. 9.2 Emacs Det står en hel del om emacs i avsnitt 2.2 på s. 22. Här är några ytterligare delar. På s. 99 100 följer sedan den refcard.pdf som följer med Emacs 1 med tips om kortkommandon och annat. (Men en hel del av dessa är sådana som ni knappast kommer att behöva.) 9.2.1 Kommandon I Emacs finns en stor mängd kommandon som gör olika saker med texten. När man trycker på en tangent i Emacs eller väljer något från en meny så utförs något av dessa kommandon. När man trycker på <home> eller C-a utförs t. ex. ett kommando move-beginning-of-line som går till början av raden och när man väljer Tools Spell Checking Spell-Check Buffer i menyerna utförs ett kommando ispell-buffer. 2 Normalt behöver man inte veta vad dessa namn på kommandona är. När man lär sig att man kan gå till början av raden med C-a så behöver man därför inte lära sig vad det kommando som utförs heter. Men när man vill använda ett kommando som inte finns i menyerna och som det inte finns ett kortkommando för så kan man ändå utföra kommandot genom att använda M-x och sedan ge kommandots namn (följt av RET). I sådana lägen kan man använda TAB för att få komplettering. 9.2.2 Att få hjälp Man kan få hjälp av olika slag i Emacs med olika kommandon som börjar med C-h (där h står för help). I tabell 9.1 visas några av de kommandon som börjar med C-h. För flera av dessa ska man efter kommandot tala om vad man vill ha hjälp med. Efter C-h c eller C-h k får man t. ex. trycka på en tangent för att få fram hjälp om just den. Om man 1 Med fullständig sökväg /local/share/emacs/23.2/etc/ refcards/refcard.pdf 2 Flera gånger i denna text kallas tangenttryckningen för ett kommando det också, så det kan stå»använd kommandot C-a«. Förhoppningsvis ska det inte leda till sammanblandning. 96

9.2. Emacs Tangent Kommando Beskrivning Tabell 9.1: Några C-h-kommandon. C-h c describe-key-briefly Talar om vilket kommando en viss tangent utför C-h k describe-key Talar även om vad detta kommando gör C-h a apropos-command Hittar ett kommando som innehåller något visst i sitt namn C-h i info Går in i Info C-h f describe-function Beskriv ett namngivet kommando C-h w where-is Hitta snabbkommando för ett visst kommando. C-h m describe-mode Beskriver aktuellt Emacs-läge. C-h t help-with-tutorial Lär dig en del Emacs-kommandon. t. ex. undrar vad som händer om man trycker på C-l kan man fråga med C-h k C-l och om man undrar vad kommandot som utförs med C-x C-b heter kan man använda C-h c C-x C-b. Hur fortsätter kommandot? Dessutom kan man använda C-h i ett flerteckenskommando för att se hur det kan fortsätta. Med C-x C-h får man t. ex. veta vad det finns för kommandon som börjar med C-x (så som t. ex. C-x C-f och C-x C-s) och med C-c C-h kan man se vad som börjar med C-c osv. Ofta så visas den hjälp man får fram i en särskild buffert *Help*. Många speciella buffertar i Emacs har sådana namn som börjar och slutar med asterisk. Istället för C-h kan man även använda <f1> som hjälptangent, dvs. funktionstangenten»f1«. 9.2.3 Manualen Det huvudsakliga dokumentationssättet till GNU är Texinfo. Det är ett format från vilket man både kan generera tryckta böcker och datorläsbar dokumentation i Info-format, alltså det som ni såg på på sidan 55. Det som blir en länk i Info-dokumentet blir istället en sidhänvisning i den tryckta boken, osv. Även Emacs är dokumenterat med Texinfo och i Emacs-menyerna finns det ett särskilt alternativ Help Read the Emacs Manual som direkt går till just det Info-dokumentet. (I många fall dessa manualer även på nätet i flera olika format. På http://www.gnu.org/ software/emacs/ finns t. ex. länkar till Emacsdokumentationen.) 9.2.4 Lägen Det som här kallas lägen i Emacs kallas också moder som mer direkt översättning av modes. Emacs använder olika slags lägen för olika slags filer. Det är alltid en major mode och kan även vara flera minor modes som ändrar beteendet på olika sätt. Olika lägen kan ha olika kortkommandon, olika menyer, olika färgläggning av bufferten, osv. Prefixtangenten C-c inleder ofta kommandon som är speciella för olika lägen. (Det har ni sett exempel på t. ex. i LaTeX-läge och HTML-läge.) 9.2.5 Prefix-argument Vissa kommandon i Emacs kräver ett argument som läses in i minibufferten efteråt. Efter C-x C-f får man t. ex. ange vilken fil det är man vill öppna. Det går dessutom alltid ge ett numeriskt prefixargument direkt före ett kommando. Olika kommandon behandlar detta argument på olika sätt. Med M-f går man t. ex. framåt ett ord. Genom att ge ett argument så går man istället fram så många ord. Ett sätt att ge prefix-argument är att trycka på siffror medan man håller Ctrl eller Meta intryckt. Så med M-1 M-2 M-f går man därmed framåt 12 ord. Eftersom själva kommandot innehåller Meta är det mesta praktiskt att använda Meta med siffrorna också denna gång, så behöver man aldrig lyfta på Alt-tangenten. Om man istället skulle gå fram tolv tecken med C-f använder man lämpligen C-1 C-2 C-f istället, så slipper man lyfta på Control-tangenten. I Emacslägen där man inte skriver in text, t. ex. Dired som är läget man får när man öppnar en katalog i Emacs, räcker det med att trycka på siffertangenter utan Ctrl eller Meta. 97

9. VERSIONSKONTROLL OCH EMACS Ett annat sätt är att använda C-u och sen skriva vanliga siffror: C-u 1 2 M-f. Om man ger bara C-u utan några siffror räknas det som 4, och två C-u som 16. Det ger ett enkelt sätt att t. ex.»gå ner några rader«( C-u <down>) eller»gå upp rätt många rader«(c-u C-u <up>). Vissa kommandon bryr sig bara om ifall de får ett argument eller inte, men inte vad argumentet är. Ett exempel är kommandot M-q (fill-paragraph) som bryter om det stycke man står i. Om man ger det ett prefixargument så lägger det dessutom in dubbla mellanslag här och där så att det ska bli en rak högermarginal. När man bara ska ge ett prefixargument vilket som helst och det inte spelar roll vad det är brukar man använda C-u, så t. ex. C-u M-q. Ett annat exempel på det som ni sett var på sidan 52 när ni fick använda C-u C-x =. Själva kommandot där var alltså bara C-x =, men det användes med ett argument för att det skulle bete sig lite annorlunda. 9.2.6 Sökningar Inkrementella sökningar med C-s (framåt) och C-r (bakåt) har ni redan gjort. Om man tar med minst en versal i söksträngen så görs det skillnad på versaler och gemener, men inte annars, så med foo hittar man såväl»foo«som»foo«som»foo«, men med söksträngen Foo hittar man bara»foo«och inte t. ex.»foo«eller»foo«. Som det stod på s. 87 kan man söka efter reguljära uttryck genom att lägga till Meta också, dvs. med C-M-s och C-M-r. 9.2.7 Regionen På sidan 25 stod det om regionen i Emacs. Ett till sätt att markera en region från tangentbordet är att hålla ner skifttangenten medan man förflyttar sig med piltangenterna. Många kommandon beter sig lite annorlunda ifall man har en aktiv markerad region. Kommandot M-$ som du använt för att stavningskontrollera ett ord kontrollerar t. ex. hela regionen om man har en aktiv sådan. Referenskort till Emacs på de två följande sidorna 98

GNU Emacs Reference Card (for version 23) Starting Emacs To enter GNU Emacs 23, just type its name: emacs Leaving Emacs suspend Emacs (or iconify it under X) exit Emacs permanently Files C-z C-x C-c read a file into Emacs C-x C-f save a file back to disk C-x C-s save all files C-x s insert contents of another file into this buffer C-x i replace this file with the file you really want C-x C-v write buffer to a specified file C-x C-w toggle read-only status of buffer C-x C-q Getting Help The help system is simple. Type C-h (or F1) and follow the directions. If you are a first-time user, type C-h t for a tutorial. remove help window C-x 1 scroll help window C-M-v apropos: show commands matching a string C-h a describe the function a key runs C-h k describe a function C-h f get mode-specific information C-h m Error Recovery abort partially typed or executing command C-g recover files lost by a system crash M-x recover-session undo an unwanted change C-x u, C-_ or C-/ restore a buffer to its original contents M-x revert-buffer redraw garbaged screen C-l Incremental Search search forward C-s search backward C-r regular expression search C-M-s reverse regular expression search C-M-r select previous search string M-p select next later search string M-n exit incremental search RET undo effect of last character DEL abort current search C-g Use C-s or C-r again to repeat the search in either direction. If Emacs is still searching, C-g cancels only the part not matched. c 2010 Free Software Foundation, Inc. Permissions on back. Motion entity to move over backward forward character C-b C-f word M-b M-f line C-p C-n go to line beginning (or end) C-a C-e sentence M-a M-e paragraph M-{ M-} page C-x [ C-x ] sexp C-M-b C-M-f function C-M-a C-M-e go to buffer beginning (or end) M-< M-> scroll to next screen C-v scroll to previous screen M-v scroll left C-x < scroll right C-x > scroll current line to center of screen C-u C-l Killing and Deleting entity to kill backward forward character (delete, not kill) DEL C-d word M-DEL M-d line (to end of) M-0 C-k C-k sentence C-x DEL M-k sexp M-- C-M-k C-M-k kill region C-w copy region to kill ring M-w kill through next occurrence of char M-z char yank back last thing killed C-y replace last yank with previous kill M-y Marking set mark here exchange point and mark set mark arg words away mark paragraph mark page mark sexp mark function mark entire buffer Query Replace C-@ or C-SPC C-x C-x M-@ M-h C-x C-p C-M-@ C-M-h C-x h interactively replace a text string M-% using regular expressions M-x query-replace-regexp Valid responses in query-replace mode are replace this one, go on to next SPC replace this one, don t move, skip to next without replacing DEL replace all remaining matches! back up to the previous match ^ exit query-replace RET enter recursive edit (C-M-c to exit) C-r Multiple Windows When two commands are shown, the second is a similar command for a frame instead of a window. delete all other windows C-x 1 C-x 5 1 split window, above and below C-x 2 C-x 5 2 delete this window C-x 0 C-x 5 0 split window, side by side C-x 3 scroll other window C-M-v switch cursor to another window C-x o C-x 5 o select buffer in other window C-x 4 b C-x 5 b display buffer in other window C-x 4 C-o C-x 5 C-o find file in other window C-x 4 f C-x 5 f find file read-only in other window C-x 4 r C-x 5 r run Dired in other window C-x 4 d C-x 5 d find tag in other window C-x 4. C-x 5. grow window taller C-x ^ shrink window narrower C-x { grow window wider C-x } Formatting indent current line (mode-dependent) TAB indent region (mode-dependent) C-M-\ indent sexp (mode-dependent) C-M-q indent region rigidly arg columns C-x TAB insert newline after point C-o move rest of line vertically down C-M-o delete blank lines around point C-x C-o join line with previous (with arg, next) M-^ delete all white space around point M-\ put exactly one space at point M-SPC fill paragraph M-q set fill column to arg C-x f set prefix each line starts with C-x. set face M-o Case Change uppercase word lowercase word capitalize word uppercase region lowercase region The Minibuffer M-u M-l M-c C-x C-u C-x C-l The following keys are defined in the minibuffer. complete as much as possible TAB complete up to one word SPC complete and execute RET show possible completions? fetch previous minibuffer input M-p fetch later minibuffer input or default M-n regexp search backward through history M-r regexp search forward through history M-s abort command C-g Type C-x ESC ESC to edit and repeat the last command that used the minibuffer. Type F10 to activate menu bar items on text terminals.

GNU Emacs Reference Card Buffers select another buffer C-x b list all buffers C-x C-b kill a buffer C-x k Transposing transpose characters C-t transpose words M-t transpose lines C-x C-t transpose sexps C-M-t Spelling Check check spelling of current word M-$ check spelling of all words in region M-x ispell-region check spelling of entire buffer M-x ispell-buffer Tags find a tag (a definition) M-. find next occurrence of tag C-u M-. specify a new tags file M-x visit-tags-table regexp search on all files in tags table M-x tags-search run query-replace on all the files M-x tags-query-replace continue last tags search or query-replace M-, Shells execute a shell command M-! run a shell command on the region M- filter region through a shell command C-u M- start a shell in window *shell* M-x shell Rectangles copy rectangle to register C-x r r kill rectangle C-x r k yank rectangle C-x r y open rectangle, shifting text right C-x r o blank out rectangle C-x r c prefix each line with a string C-x r t Abbrevs add global abbrev C-x a g add mode-local abbrev C-x a l add global expansion for this abbrev C-x a i g add mode-local expansion for this abbrev C-x a i l explicitly expand abbrev C-x a e expand previous word dynamically M-/ Regular Expressions any single character except a newline. (dot) zero or more repeats * one or more repeats + zero or one repeat? quote regular expression special character c \c alternative ( or ) \ grouping \(... \) same text as nth group \n at word break \b not at word break \B entity match start match end line ^ $ word \< \> buffer \ \ class of characters match these match others explicit set [... ] [^... ] word-syntax character \w \W character with syntax c \sc \Sc International Character Sets specify principal language C-x RET l show all input methods M-x list-input-methods enable or disable input method C-\ set coding system for next command C-x RET c show all coding systems M-x list-coding-systems choose preferred coding system M-x prefer-coding-system Info enter the Info documentation reader C-h i find specified function or variable in Info C-h S Moving within a node: scroll forward SPC scroll reverse DEL beginning of node. (dot) Moving between nodes: next node n previous node p move up u select menu item by name m select nth menu item by number (1 9) n follow cross reference (return with l) f return to last node you saw l return to directory node d go to top node of Info file t go to any node by name g Other: run Info tutorial h look up a subject in the indices i search nodes for regexp s quit Info q Registers save region in register insert register contents into buffer save value of point in register jump to point saved in register Keyboard Macros C-x r s C-x r i C-x r SPC C-x r j start defining a keyboard macro C-x ( end keyboard macro definition C-x ) execute last-defined keyboard macro C-x e append to last keyboard macro C-u C-x ( name last keyboard macro M-x name-last-kbd-macro insert Lisp definition in buffer M-x insert-kbd-macro Commands Dealing with Emacs Lisp eval sexp before point eval current defun eval region read and eval minibuffer load from standard system directory Simple Customization C-x C-e C-M-x M-x eval-region M-: M-x load-library customize variables and faces M-x customize Making global key bindings in Emacs Lisp (example): (global-set-key (kbd "C-c g") search-forward) (global-set-key (kbd "M-#") query-replace-regexp) Writing Commands (defun command-name (args) "documentation" (interactive "template") body) An example: (defun this-line-to-top-of-window (line) "Reposition current line to top of window. With ARG, put point on line ARG." (interactive "P") (recenter (if (null line) 0 (prefix-numeric-value line)))) The interactive spec says how to read arguments interactively. Type C-h f interactive for more details. Copyright c 2010 Free Software Foundation, Inc. For GNU Emacs version 23 Designed by Stephen Gildea Permission is granted to make and distribute modified or unmodified copies of this card provided the copyright notice and this permission notice are preserved on all copies. For copies of the GNU Emacs manual, see: http://www.gnu.org/software/emacs/#manuals

Laboration 9: Versionskontroll och Emacs Versionskontroll Gå till din kurskatalog. Du ska där skapa två underkataloger med hjälp av dessa kommandon: svn co svn://stp/ids10/username svn co svn://stp/ids10/alla där username är ditt användarnamn. Du blir tillfrågad om ett lösenord. (Inget kommer att ekas när du skriver in lösenordet.) Det är inte ditt vanliga inloggningslösenord utan ett annat. Just ditt lösenord står av bekvämlighetsskäl i filen /local/svn/passwords/username som bara är läsbar för dig. Kommandona ovan för att checka ut katalogerna var engångsföreteelser. Där behövde du ge adresser till de repositorier som skulle användas, men nu minns Subversion detta. Gå först till den nya katalog som heter som ditt användarnamn. En av filerna där heter foo.txt. Öppna den i Emacs. I informationsraden står det»svn«för att visa att denna fil sköts av Subversion. Använd C-x 5 f i Emacs för att öppna en ny fil ids9.txt i samma katalog för att skriva svaren på följande frågor i. Vad gjorde detta kommando (tydli- Uppgift 9.1 gen)?... is not a version controlled directory.: Varning! Om du får denna varning tillsammans med en fråga om»vc backend«så avbryt med C-g! Då har du försökt checka in en fil någonannanstans än i någon av dina två Subversion-kataloger. Tillbaks till foo.txt. Byt ut ordet»gamla«mot»nya«där och spara. Nu skiljer sig den version du har i din katalog från den incheckade. Använd Tools Version Control Compare with Base Version för att i kompakt form få se skillnaderna. Det viktigaste Emacs-kommandot för versionskontroll är C-x v v för att checka in en fil, så det är det värt att lära sig kortkommandot för. Använd det nu! Innan själva incheckningen sker får du skriva ett loggmeddelande om vad det är för en ändring du gjort. Gör så. Uppgift 9.2 Vad är kortkommandot för att avsluta detta loggmeddelande? Uppgift 9.3 Hur fick du reda på vad kortkommandot var? Kommer du på nåt annat sätt du kunde få reda på det då? Bland relaterade kommandon finns bland annat sådana för att lista en fils historia (logg), ta fram tidigare versioner, med mera. Din fil ids9.txt är inte inlagd i Subversion bara för att den ligger i samma katalog. Lägg in den filen också (trots att du än så länge bara svarat på några få frågor. För detta behöver du göra C-x v v två gånger. Första gången registrerar du filen och andra gången checkas den verkligen in. Gör så! (Loggmeddelandet kan vara tomt om du vill.) När du är klar ska det stå»svn:«med siffror efter i informationsraden. Flytta även dina svar från förra kapitlet till denna katalog under namnet ids8.txt (oavsett om du är klar med den eller inte) och checka in den filen. Eventuella kompletteringar till dessa labbar ska du senare lägga in i dessa filer och checka in. Titta nu i katalogen alla som du också skapade i början av dessa instruktioner. Den skiljer sig genom att där har ni alla rätt att skriva. Gå till den kata- 101

LABORATION 9: VERSIONSKONTROLL OCH EMACS logen och ge kommandot svn update. Ifall någon annan redan har gjort någon ändring så kommer du nu att få filerna där ändrade enligt detta. Uppgift 9.4 Vad gav svn update för resultat? Öppna filen sagobok.txt i den katalogen. Den innehåller början till en sagobok skriven med LaTeX. Prova att TeXa den och se på resultatet med hjälp av C-c C-c ett par gånger. (Om det blir något TeX-fel så är det någon som råkat lägga in något fel. Det fixar nog den personen snart. Då gör du svn update igen för att få den nya versionen.) Det finns en rubrik i filen som heter som ditt användarnamn. Ersätt det som står under rubriken med din saga. Du ska ha en LaTeX-anpassad saga i din fil ids6.tex som du kan kopiera detta ifrån. Prova att det går bra att TeXa utan felmeddelanden efter ditt inlägg och checka sedan in din ändring. Tillbaks till foo.txt: Uppgift 9.5 Använd Tools Version Control Show History för att få se loggen för foo.txt. Hur lyder den? För varje version står det»r«följt av siffror för att visa vilken revidering den versionen hör till. Uppgift 9.6 Vad är det för siffror för den tidigaste versionen av den filen? Hitta ett kommando i Tools Version Control för att visa en annan version och välj den där allra första versionen. (Skriv bara siffrorna utan inledande»r«.) Uppgift 9.7 av denna fil? Så vad stod det i denna första version Checka in din ids9.txt innan du går vidare! Slutar för dagen?: Om du slutar för dagen innan du är klar, så checka in det du har gjort hittills i ids9.txt innan du går! Om du har ändrat saker i din ids8.txt så checka in den också innan du går. Emacs Ta fram hjälp Uppgift 9.8 I detta kapitel stod det att kommandot C-x = beter sig lite annorlunda när det får ett prefixargument. Hur beskrivs den skillnaden i kommandots hjälptext? (Citera!) Ta fram en förteckning med Emacskommandon som innehåller»word«i sitt namn för att hitta kommandon som gör saker med ord. Det står vad kommandona heter och hur man kan utföra dem. (Om det inte går på annat sätt så med M-x.) Ibland finns det flera sätt att utföra samma kommando. Uppgift 9.9 I den förteckning du fått fram nämns backward-word som kan utföras med M-b. Vilka andra tangenter kan man trycka på för att utföra det kommandot? Ta fram kommandon vars namn slutar på»regexp«. Uppgift 9.10 Uppgift 9.11 detta? Hur gjorde du det? Vad visade Emacs för resultat från De flesta av dessa kommandon finns det inte snabbkommandon för, utan det är M-x som nämns för att köra dem, men det finns några undantag som har snabbkommandon. Uppgift 9.12 Ett av dessa undantag är ett kommando för att visa sådant som matchar ett visst reguljärt uttryck på ett visst sätt (med en viss face). Vad heter det kommandot? Uppgift 9.13 Snabbkommandot för det kommandot består av tre delar. Ge de två första delarna och tryck sen på hjälptangenten för att få veta vad det finns för möjliga kommandon som börjar likadant. Hur såg hjälpen du fick då ut? (Alltså innehållet i bufferten *Help* då.) Emacs-kommandot shell finns det inget snabbkommando för, så det får man lov att ge med M-x. Gör så! Detta kör ett skal inne i Emacs. 102

Emacs Uppgift 9.14 Man rör sig runt i bufferten med vanliga förflyttningskommandon som t. ex. <up> och <down>, så dessa fungerar inte som i terminalen så att de tar fram tidigare kommandon. Vad kan man istället ge för kommandon för att få detta? Hur såg du det? Ramar Kommandon som gör saker med ramar (frames) börjar med C-x 5. Ta reda på vad det finns för olika kommandon som börjar med C-x 5 och har ett tecken till. Uppgift 9.15 Vad heter kommandot med vilket man kan öppna en fil i en annan ram som du gjorde tidigare under denna labb? Öppna den nya filen /tmp/fil.txt i en ny ram. Uppgift 9.16 Du har fått ett nytt fönstersystemsfönster. Vad är dess titel? (Det som står på dess översta rad.) Detta hade också gått att använda File New Frame i menyerna till följt av det vanliga kommandot för att öppna en fil i den nya ramen. Kommandot för att ta bort en ram finns även det i Filemenyn. Använd det. I menyn Tools Compare (Ediff) hittar du ett Emacskommando för att jämföra två buffertar. Använd det! (Välj bufferten med den äldsta filen först (A) och sen den nya (B).) Du får en egen liten ram som heter Ediff. De viktigaste kommandona här är SPC (mellanslag alltså) för att gå till nästa skillnad och DEL för att gå till förra skillnaden. Prova att gå fram några steg! Det finns annat att trycka än SPC och DEL och det står hur du kan få hjälp. Uppgift 9.19 Hur många skillnader räknar Ediff med mellan dessa filer? Uppgift 9.20 Vilken tangent kan man använda här för att hoppa till en viss skillnad genom att ange dess nummer som prefixargument? Uppgift 9.21 Uppgift 9.22 Uppgift 9.23 Vad består skillnad nummer 313 av? Vad består skillnad nummer 150 av? Hur avslutar man Ediff? Det finns flera andra Ediff-kommandon som du såg i menyn. Ett ytterligare som av någon anledning inte fanns i menyn är ediff-backup. Ta fram beskrivningen av detta kommando nu när du vet dess namn. Uppgift 9.24 Hur lyder den beskrivningen? Prova detta kommando med dodo.txt. Uppgift 9.17 Vad händer om man på detta sätt försöker ta bort den sista ramen man har kvar? Hur skrev du för att köra detta kom- Uppgift 9.25 mando? Jämföra filer med Ediff /local/kurs/ids/verb.txt har ändrats en del jämfört med motsvarande fil förra året, /local/ kurs/ids09/verb.txt. Du har tidigare stött på skalkommandot diff för att jämföra filer. Nu ska du istället använda ett Emacskommando. Öppna båda dessa filer i Emacs. Uppgift 9.18 Namnet på en buffert i Emacs brukar ju vara som filnamnet. Hur tycks Emacs sätta namn på buffertar när man öppnar flera filer med samma namn? Tangentbordsmakron Med makron kan man»spela in«tangenttryckningar för att sedan upprepa dem flera gånger. Gå till Emacs-dokumentationen i Info (t. ex. med Help Read the Emacs Manual) och välj menyalternativet»keyboard Macros«där. Uppgift 9.26 Så vilken tangent kan du använda för att börja spela in? Uppgift 9.27 Och vilken tangent för att sluta spela in (avsluta definitionen)? 103

LABORATION 9: VERSIONSKONTROLL OCH EMACS Uppgift 9.28 Det finns andra sätt att reda på detta, men slå ändå upp i Info för att se att du kan det också. Kontrollfråga: Vad är det för nummer på detta avsnitt i Info? (De övriga kommandona som har med makron att göra kan du strunta i denna gång.) Kopiera us-states.txt till us-states-9.txt Öppna kopian i Emacs och placera dig först på första raden. Använd nu enbart kortkommandon från tangentbordet för att ändra den raden från 1787-12-07 Delaware till Delaware (1787) genom att»döda«årtalet och sen klistra in det igen på rätt ställe tillsammans med övriga ändringar. (I resultatet är det bara ett mellanslag mellan delstatsnamn och parentes.) När detta går bra så spela in medan du gör det. Stå i början av den första raden som ska ändras och tryck på tangenten för att spela in. Ändra raden som du ska och avsluta genom att placera dig i början av nästa rad och avsluta inspelningen. Nu kan du trycka på den senaste tangenten igen för att utföra samma sak för den raden, osv. för alla rader, så att alla rader kommer att bestå av ett delstatsnamn, ett mellanrum och dess årtal inom parentes. Glöm inte att spara resultatet! Avslutning Checka in ids9.txt igen med dina nya svar. Jag kommer att checka ut den från repositoriet för att titta på den, så det är svaren som är incheckade som jag kommer att se. Du behöver alltså inte skicka några bilagor till Per, men maila honom ändå för att tala om att du är klar med labben. Om du har ändrat saker i din ids8.txt så checka in den också innan du går. 104